Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] New packages for the Unity desktop environment
@ 2024-07-28  6:03 EarldridgeJazzedPineda
  2024-07-28  6:04 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (55 more replies)
  0 siblings, 56 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-28  6:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1937 bytes --]

There is a new pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package and enable the following services:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity-gtk-module
* unity-settings-daemon
* window-stack-bridge
* unity7

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill unity` on the Terminal.

#### Known issues
* Indicators do not show up in the top panel.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* The Yaru theme is slightly broken.
* An application's menu bar appears in the application's window instead of the top panel.
* Changing wallpapers does not work, and the logo displayed by the Unity greeter (on the bottom-left) is present when logging into Unity.
* Some GTK applications (such as epiphany, gnome-text-editor, and nautilus) aren't themed properly.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 356622 bytes --]

From a361e62187d74ac8ac33f073def394e04b63594d Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/39] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2467a4d251df31c89ff8b1fe82aa8a28fcb9f64c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/39] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 127fd6a5453137..8932b691755249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4518,3 +4518,4 @@ libKPim6MimeTreeParserWidgets.so.6 mimetreeparser-24.02.0_1
 libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24ac188eb567175d2d7fb8d82b1c025a6667fd0e Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/39] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index 8932b691755249..5726cc7feed756 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4519,3 +4519,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 3c2948315a9b48c27cdc6aee32b2e574017a0d3d Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/39] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index 5726cc7feed756..530b3b462a724c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4520,3 +4520,6 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 29de876d9ded84922df61ae32ead632a0cc6a792 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/39] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 530b3b462a724c..c4a5f9b6a5511a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4523,3 +4523,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From a088e558bdc9e8d7c83a3fce5aa9f6246f0cec23 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/39] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index c4a5f9b6a5511a..62cda602c95fa3 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4524,3 +4524,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From b8eb24f4cb4ce4daa077e6522321e7e0b4e558f1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/39] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 244d19a3bdf9d5f83191697dedcb83b5a71071b5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/39] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 62cda602c95fa3..05def522255110 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4525,3 +4525,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 8351db59e413ed7ed280f2d1a58f09b91d17bdea Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/39] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 05def522255110..fa7bbbf998b7c7 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4526,3 +4526,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From d199db20d2eebe46a688dd6c04a11e2e437c7fba Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/39] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index fa7bbbf998b7c7..6b7de0695287eb 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4527,3 +4527,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 21cb47a178980e5de4ba4b3a9db29049d28c7fa1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/39] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From 652b0e6e9df5f6d38158ed10930db925d50b88a5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/39] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 6b7de0695287eb..91776cee103220 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From a5e9e85e21feeaabcd34356a3b367ee8c256afde Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/39] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 7c40f774d30cccf9e323f494ea8a956f2e51f456 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/39] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From fef406d94306daba373ab6661efce77c5306d300 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/39] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 27b06e60f208983d72124f6935d2eafa827f05b7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/39] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From 07412c5934e8efa581bc49ff53ed54841c9012ed Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/39] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From dcb030836856a2ac27915ac65febb91b2948c0d7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/39] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From 1ec8389f23a2c1b6b9cfae27d03c087eb3266f04 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/39] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From c09e9d039543b8d920c15c6eaa44b1fddda8e66c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/39] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 srcpkgs/indicator-session/template            | 25 ++++++
 5 files changed, 163 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..dda569b0606488
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,25 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From a9eed1fc46e1eb24e0ef3a83593dfbc8c1b2909f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/39] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 32d0bdf54fa2191a382103778e5dcb1f3263f3b1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/39] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 91776cee103220..46c01c399e04b1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From d942dfdee51d29a25435ed929b78ab655b42d3a6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/39] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 46c01c399e04b1..a1e48f5147f257 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 3218cfe2d041753048cd2c2f80c1275c21e3ebd4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/39] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index a1e48f5147f257..f71ce0f5ca81e1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4532,3 +4532,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 42223a28581143248ade445761363a65196b53de Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/39] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index f71ce0f5ca81e1..f3304a543d992a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4533,3 +4533,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 823ba788159330c12930c5b233023acf9aa48653 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/39] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index f3304a543d992a..a58046d9100362 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From a840ec4ab93967f78dffcbe050f95b35c3171ec6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/39] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index a58046d9100362..364e1025dd97da 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From d8c05259fd48fe73932d47317c457192a99c73e0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/39] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From 20f1f08d575c489740fc29617f470d5338951f3c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/39] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 364e1025dd97da..c992baa4ba23af 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3033,6 +3033,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4541,3 +4544,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From f829112d5c8e224af342604f4a9e2d2d4fffae27 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/39] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From 31b1a7a8baf2f50b046511abb6ac203ed732e168 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/39] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From 8058a78eb4a2ae079e6246919169da0538b29898 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/39] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  68 +++
 17 files changed, 917 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index c992baa4ba23af..5dedc581cad298 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4545,3 +4545,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..83905a5d4126b5
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,68 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5408c03fcd6e9dd262564d9c51e5ec2da5e60024 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/39] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From 3648ab5cdc9db18e04185833ed4b77480e82eedd Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/39] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From b8f59cf5f33241a1324de5188fa8f759df43f8b6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/39] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From 3bc01c794a6ae5f27babf86447119f93dbe60839 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/39] New package: unity-session-46.0

---
 .../patches/run-unity-directly.patch          |  9 +++++++++
 srcpkgs/unity-session/template                | 19 +++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/unity-session/patches/run-unity-directly.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/patches/run-unity-directly.patch b/srcpkgs/unity-session/patches/run-unity-directly.patch
new file mode 100644
index 00000000000000..edcc67853426bd
--- /dev/null
+++ b/srcpkgs/unity-session/patches/run-unity-directly.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-28 13:06:26.057871731 +0800
+@@ -3,4 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
+-TryExec=/usr/bin/unity
++Exec=/usr/bin/unity
+ Type=Application
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..df921b0199addf
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+}

From 678536d78d2f0caf3506ddc55d1a63c8e27695d6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/39] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 7e95d9dbe785b60d0ba01d34e1f56466f281e1b5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/39] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From e7268b17a2d76427fc4e2ec3b8c661a8a8e87ec5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/39] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
@ 2024-07-28  6:04 ` EarldridgeJazzedPineda
  2024-07-28  6:13 ` abenson
                   ` (54 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-28  6:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1942 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package and enable the following services:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity-gtk-module
* unity-settings-daemon
* window-stack-bridge
* unity7

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill unity` on the Terminal.

#### Known issues
* Indicators do not show up in the top panel.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* The Yaru theme is slightly broken.
* An application's menu bar appears in the application's window instead of the top panel.
* Changing wallpapers does not work, and the logo displayed by the Unity greeter (on the bottom-left) is present when logging into Unity.
* Some GTK applications (such as epiphany, gnome-text-editor, and nautilus) aren't themed properly.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 356622 bytes --]

From a361e62187d74ac8ac33f073def394e04b63594d Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/39] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2467a4d251df31c89ff8b1fe82aa8a28fcb9f64c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/39] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 127fd6a5453137..8932b691755249 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4518,3 +4518,4 @@ libKPim6MimeTreeParserWidgets.so.6 mimetreeparser-24.02.0_1
 libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24ac188eb567175d2d7fb8d82b1c025a6667fd0e Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/39] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index 8932b691755249..5726cc7feed756 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4519,3 +4519,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 3c2948315a9b48c27cdc6aee32b2e574017a0d3d Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/39] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index 5726cc7feed756..530b3b462a724c 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4520,3 +4520,6 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 29de876d9ded84922df61ae32ead632a0cc6a792 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/39] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 530b3b462a724c..c4a5f9b6a5511a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4523,3 +4523,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From a088e558bdc9e8d7c83a3fce5aa9f6246f0cec23 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/39] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index c4a5f9b6a5511a..62cda602c95fa3 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4524,3 +4524,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From b8eb24f4cb4ce4daa077e6522321e7e0b4e558f1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/39] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 244d19a3bdf9d5f83191697dedcb83b5a71071b5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/39] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 62cda602c95fa3..05def522255110 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4525,3 +4525,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 8351db59e413ed7ed280f2d1a58f09b91d17bdea Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/39] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 05def522255110..fa7bbbf998b7c7 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4526,3 +4526,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From d199db20d2eebe46a688dd6c04a11e2e437c7fba Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/39] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index fa7bbbf998b7c7..6b7de0695287eb 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4527,3 +4527,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 21cb47a178980e5de4ba4b3a9db29049d28c7fa1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/39] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From 652b0e6e9df5f6d38158ed10930db925d50b88a5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/39] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 6b7de0695287eb..91776cee103220 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From a5e9e85e21feeaabcd34356a3b367ee8c256afde Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/39] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 7c40f774d30cccf9e323f494ea8a956f2e51f456 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/39] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From fef406d94306daba373ab6661efce77c5306d300 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/39] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 27b06e60f208983d72124f6935d2eafa827f05b7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/39] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From 07412c5934e8efa581bc49ff53ed54841c9012ed Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/39] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From dcb030836856a2ac27915ac65febb91b2948c0d7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/39] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From 1ec8389f23a2c1b6b9cfae27d03c087eb3266f04 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/39] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From c09e9d039543b8d920c15c6eaa44b1fddda8e66c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/39] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 srcpkgs/indicator-session/template            | 25 ++++++
 5 files changed, 163 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..dda569b0606488
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,25 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From a9eed1fc46e1eb24e0ef3a83593dfbc8c1b2909f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/39] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 32d0bdf54fa2191a382103778e5dcb1f3263f3b1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/39] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 91776cee103220..46c01c399e04b1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From d942dfdee51d29a25435ed929b78ab655b42d3a6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/39] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 46c01c399e04b1..a1e48f5147f257 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 3218cfe2d041753048cd2c2f80c1275c21e3ebd4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/39] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index a1e48f5147f257..f71ce0f5ca81e1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4532,3 +4532,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 42223a28581143248ade445761363a65196b53de Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/39] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index f71ce0f5ca81e1..f3304a543d992a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4533,3 +4533,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 823ba788159330c12930c5b233023acf9aa48653 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/39] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index f3304a543d992a..a58046d9100362 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From a840ec4ab93967f78dffcbe050f95b35c3171ec6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/39] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index a58046d9100362..364e1025dd97da 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From d8c05259fd48fe73932d47317c457192a99c73e0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/39] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From 20f1f08d575c489740fc29617f470d5338951f3c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/39] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 364e1025dd97da..c992baa4ba23af 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3033,6 +3033,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4541,3 +4544,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From f829112d5c8e224af342604f4a9e2d2d4fffae27 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/39] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From 31b1a7a8baf2f50b046511abb6ac203ed732e168 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/39] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From 8058a78eb4a2ae079e6246919169da0538b29898 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/39] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  68 +++
 17 files changed, 917 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index c992baa4ba23af..5dedc581cad298 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4545,3 +4545,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..83905a5d4126b5
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,68 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5408c03fcd6e9dd262564d9c51e5ec2da5e60024 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/39] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From 3648ab5cdc9db18e04185833ed4b77480e82eedd Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/39] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From b8f59cf5f33241a1324de5188fa8f759df43f8b6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/39] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From 3bc01c794a6ae5f27babf86447119f93dbe60839 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/39] New package: unity-session-46.0

---
 .../patches/run-unity-directly.patch          |  9 +++++++++
 srcpkgs/unity-session/template                | 19 +++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/unity-session/patches/run-unity-directly.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/patches/run-unity-directly.patch b/srcpkgs/unity-session/patches/run-unity-directly.patch
new file mode 100644
index 00000000000000..edcc67853426bd
--- /dev/null
+++ b/srcpkgs/unity-session/patches/run-unity-directly.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-28 13:06:26.057871731 +0800
+@@ -3,4 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
+-TryExec=/usr/bin/unity
++Exec=/usr/bin/unity
+ Type=Application
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..df921b0199addf
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+}

From 678536d78d2f0caf3506ddc55d1a63c8e27695d6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/39] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 7e95d9dbe785b60d0ba01d34e1f56466f281e1b5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/39] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From e7268b17a2d76427fc4e2ec3b8c661a8a8e87ec5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/39] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
  2024-07-28  6:04 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-07-28  6:13 ` abenson
  2024-07-28  6:27 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (53 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: abenson @ 2024-07-28  6:13 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 192 bytes --]

New comment by abenson on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2254358638

Comment:
Please rebase this to get rid of the merge commit.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
  2024-07-28  6:04 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
  2024-07-28  6:13 ` abenson
@ 2024-07-28  6:27 ` EarldridgeJazzedPineda
  2024-07-28  8:06 ` EarldridgeJazzedPineda
                   ` (52 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-28  6:27 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1977 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package and enable the following services:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity-gtk-module
* unity-settings-daemon
* window-stack-bridge
* unity7

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill unity` on the Terminal.

#### Known issues
* Indicators do not show up in the top panel.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* The Yaru theme is slightly broken.
* An application's menu bar appears in the application's window instead of the top panel.
* Changing wallpapers does not work, and the logo displayed by the Unity greeter (on the bottom-left) is present when logging into Unity.
* Some GTK applications (such as epiphany, gnome-text-editor, and nautilus) aren't themed properly.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 356562 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/39] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/39] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/39] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/39] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/39] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/39] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/39] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/39] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/39] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/39] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/39] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/39] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/39] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/39] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From c9baa0dcd290733053b22f9fe99be9d226f53aa4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/39] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 2b13adf79df6797c170e245a1f0cc9b4955f0805 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/39] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From 0a05c605ec982071f6a88551321ce06080841361 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/39] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From ef558d6b8e9d17a94a0289b7aef137ab3954629b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/39] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From 67fae035e7647169d7183650a5417f4e65658581 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/39] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From d33c360f3076e358029c1b2ca822effa0245f853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/39] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 srcpkgs/indicator-session/template            | 25 ++++++
 5 files changed, 163 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..dda569b0606488
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,25 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From 5a7a88eeccda9ebb086e808235503d45028438a3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/39] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 5368931bd482094f488d1c7710914216c74c311a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/39] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bd98a1511a61dcfdd93b2506c3e78db25b8645c3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/39] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 17a2bcb905782ecd669845678eec44896e6496dc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/39] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 45904c7f3b6d1217494e06ca1933dd97c6c73e50 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/39] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From a492560e54254e8b8cdd3916cdd49220bf881c73 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/39] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 6ce7e68060106d2c768bc8a7ff1ad049d08324cf Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/39] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 248c40fec7e8555870111facc8b620a2f5fc7439 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/39] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From 4e0460fd6ef18d758e29722b9291915239d6f78c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/39] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From c88a584651ad2a8205fda18ef4da1e8f48a5dc36 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/39] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From ab9cd06b793f81305dbee433c4edfa3b02a3a8fc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/39] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From 95ddc41a2c46c3b1ea2744d3f00d26589ba0bf23 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/39] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  68 +++
 17 files changed, 917 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..83905a5d4126b5
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,68 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From a1a9554179d33e08b993a14757ecd7e8635ed0f5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/39] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From e3b0f449f69c81461f1b12a505533647b0281577 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/39] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From 295f347896357bbd8679608475b85b98840df52a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/39] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From 88bc21b0bf01474e4916dc006ca567f19686bdba Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/39] New package: unity-session-46.0

---
 .../patches/run-unity-directly.patch          |  9 +++++++++
 srcpkgs/unity-session/template                | 19 +++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/unity-session/patches/run-unity-directly.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/patches/run-unity-directly.patch b/srcpkgs/unity-session/patches/run-unity-directly.patch
new file mode 100644
index 00000000000000..edcc67853426bd
--- /dev/null
+++ b/srcpkgs/unity-session/patches/run-unity-directly.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-28 13:06:26.057871731 +0800
+@@ -3,4 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
+-TryExec=/usr/bin/unity
++Exec=/usr/bin/unity
+ Type=Application
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..df921b0199addf
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+}

From 4a46b3613fbb006213385448209de31d52b53056 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/39] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 3d4766d71e9998e4eb27327e9b591fd5623db69c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/39] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From 0bc249175111359d07bb49481a8b8b40b7714578 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/39] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (2 preceding siblings ...)
  2024-07-28  6:27 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-07-28  8:06 ` EarldridgeJazzedPineda
  2024-07-29  7:07 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (51 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-28  8:06 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 327 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2254385967

Comment:
Indicators just simply refuse to work. Not sure if it has something to do with using libayatana-indicator vs libindicator, because Unity isn't designed to use the former.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (3 preceding siblings ...)
  2024-07-28  8:06 ` EarldridgeJazzedPineda
@ 2024-07-29  7:07 ` EarldridgeJazzedPineda
  2024-07-30  2:46 ` EarldridgeJazzedPineda
                   ` (50 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-29  7:07 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1972 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package and enable the following services:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity-gtk-module
* unity-settings-daemon
* window-stack-bridge
* unity7

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill unity` on the Terminal.

#### Known issues
* Indicators do not show up in the top panel.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* The Yaru theme does not work.
* An application's menu bar appears in the application's window instead of the top panel.
* Changing wallpapers does not work, and the logo displayed by the Unity greeter (on the bottom-left) is present when logging into Unity.
* Some GTK applications (such as epiphany, gnome-text-editor, and nautilus) aren't themed properly.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 356623 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/39] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/39] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/39] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/39] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/39] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/39] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/39] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/39] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/39] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/39] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/39] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/39] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/39] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/39] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From c9baa0dcd290733053b22f9fe99be9d226f53aa4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/39] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 2b13adf79df6797c170e245a1f0cc9b4955f0805 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/39] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From 0a05c605ec982071f6a88551321ce06080841361 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/39] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From ef558d6b8e9d17a94a0289b7aef137ab3954629b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/39] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From 67fae035e7647169d7183650a5417f4e65658581 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/39] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From d33c360f3076e358029c1b2ca822effa0245f853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/39] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 srcpkgs/indicator-session/template            | 25 ++++++
 5 files changed, 163 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..dda569b0606488
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,25 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From 5a7a88eeccda9ebb086e808235503d45028438a3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/39] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 5368931bd482094f488d1c7710914216c74c311a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/39] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bd98a1511a61dcfdd93b2506c3e78db25b8645c3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/39] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 17a2bcb905782ecd669845678eec44896e6496dc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/39] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 45904c7f3b6d1217494e06ca1933dd97c6c73e50 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/39] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From a492560e54254e8b8cdd3916cdd49220bf881c73 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/39] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 6ce7e68060106d2c768bc8a7ff1ad049d08324cf Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/39] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 248c40fec7e8555870111facc8b620a2f5fc7439 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/39] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From 4e0460fd6ef18d758e29722b9291915239d6f78c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/39] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From c88a584651ad2a8205fda18ef4da1e8f48a5dc36 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/39] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From ab9cd06b793f81305dbee433c4edfa3b02a3a8fc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/39] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From 7b822e5950b6d3b5f06e0c6149276e0056a7d3d6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/39] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 +++
 17 files changed, 918 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 06f61dbd0f2496c54e7c7552c4eacbffe56d0535 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/39] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From b352fddb60d0f60f8c7c94a28b779a7c16e3b933 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/39] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From a8000691ce3dd61e4d4b288283c2e2ca0c912dfc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/39] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From 600314403fb38111c6641494ce587e0a3fab583c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/39] New package: unity-session-46.0

---
 .../patches/run-unity-directly.patch          |  9 +++++++++
 srcpkgs/unity-session/template                | 19 +++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/unity-session/patches/run-unity-directly.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/patches/run-unity-directly.patch b/srcpkgs/unity-session/patches/run-unity-directly.patch
new file mode 100644
index 00000000000000..edcc67853426bd
--- /dev/null
+++ b/srcpkgs/unity-session/patches/run-unity-directly.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-28 13:06:26.057871731 +0800
+@@ -3,4 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
+-TryExec=/usr/bin/unity
++Exec=/usr/bin/unity
+ Type=Application
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..df921b0199addf
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+}

From 04e30ec48722cc0ce9e3e0c637c2478e6c69207a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/39] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From d4c01dd46c9ba2fc76fedce26b89573f4595d1c7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/39] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From d41096ee2a49d211e2471d6f5b7e647993497d77 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/39] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (4 preceding siblings ...)
  2024-07-29  7:07 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-07-30  2:46 ` EarldridgeJazzedPineda
  2024-07-30  3:11 ` EarldridgeJazzedPineda
                   ` (49 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-30  2:46 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2029 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package and enable the following services:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill unity` on the Terminal.

#### Known issues
* Indicators do not show up in the top panel.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* The Yaru theme does not work.
* An application's menu bar appears in the application's window instead of the top panel.
* Changing wallpapers does not work, and the logo displayed by the Unity greeter (on the bottom-left) is present when logging into Unity.
* Some GTK applications (such as epiphany, gnome-text-editor, and nautilus) aren't themed properly.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 357623 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/39] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/39] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/39] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/39] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/39] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/39] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/39] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/39] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/39] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/39] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/39] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/39] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/39] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/39] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From c9baa0dcd290733053b22f9fe99be9d226f53aa4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/39] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 2b13adf79df6797c170e245a1f0cc9b4955f0805 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/39] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From 0a05c605ec982071f6a88551321ce06080841361 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/39] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From ef558d6b8e9d17a94a0289b7aef137ab3954629b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/39] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From 67fae035e7647169d7183650a5417f4e65658581 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/39] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From d33c360f3076e358029c1b2ca822effa0245f853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/39] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 srcpkgs/indicator-session/template            | 25 ++++++
 5 files changed, 163 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..dda569b0606488
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,25 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From 5a7a88eeccda9ebb086e808235503d45028438a3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/39] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 5368931bd482094f488d1c7710914216c74c311a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/39] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bd98a1511a61dcfdd93b2506c3e78db25b8645c3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/39] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 17a2bcb905782ecd669845678eec44896e6496dc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/39] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 45904c7f3b6d1217494e06ca1933dd97c6c73e50 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/39] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From a492560e54254e8b8cdd3916cdd49220bf881c73 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/39] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 6ce7e68060106d2c768bc8a7ff1ad049d08324cf Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/39] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 248c40fec7e8555870111facc8b620a2f5fc7439 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/39] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From 4e0460fd6ef18d758e29722b9291915239d6f78c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/39] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From c88a584651ad2a8205fda18ef4da1e8f48a5dc36 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/39] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From ab9cd06b793f81305dbee433c4edfa3b02a3a8fc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/39] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From 7b822e5950b6d3b5f06e0c6149276e0056a7d3d6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/39] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 +++
 17 files changed, 918 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 06f61dbd0f2496c54e7c7552c4eacbffe56d0535 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/39] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From b352fddb60d0f60f8c7c94a28b779a7c16e3b933 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/39] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From a8000691ce3dd61e4d4b288283c2e2ca0c912dfc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/39] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From 78a2cb0215796606208e218e0e8eb33534a0b9f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/39] New package: unity-session-46.0

---
 srcpkgs/unity-session/files/unity.desktop     |  6 ++++++
 .../patches/use-gnome-session.patch           | 16 ++++++++++++++
 srcpkgs/unity-session/template                | 21 +++++++++++++++++++
 3 files changed, 43 insertions(+)
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..f3c384a7da5942
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ebf770a01a69a1
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,21 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+}

From aca735faea90ee3a5e78f32501049d98d5b94600 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/39] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 646e1f6edca0eb6610538395392bc07c3170e100 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/39] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From 6c2f64629e9f0bd998d40b2c9db0c52a66d18a96 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/39] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (5 preceding siblings ...)
  2024-07-30  2:46 ` EarldridgeJazzedPineda
@ 2024-07-30  3:11 ` EarldridgeJazzedPineda
  2024-07-30  3:12 ` EarldridgeJazzedPineda
                   ` (48 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-30  3:11 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 409 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2254385967

Comment:
Indicators just simply refuse to work. Not sure if it has something to do with using libayatana-indicator vs libindicator, because Unity isn't designed to use the former.

EDIT: I was right. Indicators have to be of type 'org.ayatana.indicator.root'.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (6 preceding siblings ...)
  2024-07-30  3:11 ` EarldridgeJazzedPineda
@ 2024-07-30  3:12 ` EarldridgeJazzedPineda
  2024-07-30  3:35 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (47 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-30  3:12 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 189 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2257374681

Comment:
Can I squash all of the commits?

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (7 preceding siblings ...)
  2024-07-30  3:12 ` EarldridgeJazzedPineda
@ 2024-07-30  3:35 ` EarldridgeJazzedPineda
  2024-07-30  3:35 ` EarldridgeJazzedPineda
                   ` (46 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-30  3:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1820 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package and enable the following services:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Known issues
* Some, but not all of the indicators work. unity-panel-service has to be started manually.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Some GTK applications (such as epiphany, gnome-text-editor, and nautilus) aren't themed properly.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 358434 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/40] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/40] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/40] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/40] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/40] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/40] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/40] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/40] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/40] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/40] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/40] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/40] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/40] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/40] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From c9baa0dcd290733053b22f9fe99be9d226f53aa4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/40] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 2b13adf79df6797c170e245a1f0cc9b4955f0805 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/40] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From 0a05c605ec982071f6a88551321ce06080841361 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/40] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From ef558d6b8e9d17a94a0289b7aef137ab3954629b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/40] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From 67fae035e7647169d7183650a5417f4e65658581 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/40] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From d33c360f3076e358029c1b2ca822effa0245f853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/40] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 srcpkgs/indicator-session/template            | 25 ++++++
 5 files changed, 163 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..dda569b0606488
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,25 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From 5a7a88eeccda9ebb086e808235503d45028438a3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/40] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 5368931bd482094f488d1c7710914216c74c311a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/40] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bd98a1511a61dcfdd93b2506c3e78db25b8645c3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/40] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 17a2bcb905782ecd669845678eec44896e6496dc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/40] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 45904c7f3b6d1217494e06ca1933dd97c6c73e50 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/40] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From a492560e54254e8b8cdd3916cdd49220bf881c73 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/40] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 6ce7e68060106d2c768bc8a7ff1ad049d08324cf Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/40] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 248c40fec7e8555870111facc8b620a2f5fc7439 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/40] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From 4e0460fd6ef18d758e29722b9291915239d6f78c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/40] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From c88a584651ad2a8205fda18ef4da1e8f48a5dc36 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/40] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From ab9cd06b793f81305dbee433c4edfa3b02a3a8fc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/40] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From 7b822e5950b6d3b5f06e0c6149276e0056a7d3d6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/40] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 +++
 17 files changed, 918 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 06f61dbd0f2496c54e7c7552c4eacbffe56d0535 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/40] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From b352fddb60d0f60f8c7c94a28b779a7c16e3b933 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/40] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From a8000691ce3dd61e4d4b288283c2e2ca0c912dfc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/40] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From 78a2cb0215796606208e218e0e8eb33534a0b9f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/40] New package: unity-session-46.0

---
 srcpkgs/unity-session/files/unity.desktop     |  6 ++++++
 .../patches/use-gnome-session.patch           | 16 ++++++++++++++
 srcpkgs/unity-session/template                | 21 +++++++++++++++++++
 3 files changed, 43 insertions(+)
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..f3c384a7da5942
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ebf770a01a69a1
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,21 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+}

From aca735faea90ee3a5e78f32501049d98d5b94600 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/40] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 646e1f6edca0eb6610538395392bc07c3170e100 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/40] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From 6c2f64629e9f0bd998d40b2c9db0c52a66d18a96 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/40] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

From 6ee99687e1aafa8ee4a0ae763f1d22dac9485cf2 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 30 Jul 2024 11:34:47 +0800
Subject: [PATCH 40/40] yaru: compile Unity themes

---
 srcpkgs/yaru/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (8 preceding siblings ...)
  2024-07-30  3:35 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-07-30  3:35 ` EarldridgeJazzedPineda
  2024-07-30  5:07 ` EarldridgeJazzedPineda
                   ` (45 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-30  3:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 189 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2257374681

Comment:
Can I squash all of the commits?

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (9 preceding siblings ...)
  2024-07-30  3:35 ` EarldridgeJazzedPineda
@ 2024-07-30  5:07 ` EarldridgeJazzedPineda
  2024-07-30 23:50 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (44 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-30  5:07 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 467 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2254385967

Comment:
Indicators just simply refuse to work. Not sure if it has something to do with using libayatana-indicator vs libindicator, because Unity isn't designed to use the former.

EDIT: I was right. Indicators have to be of type 'org.ayatana.indicator.root'. I might try packaging the Ayatana counterpart indicators.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (10 preceding siblings ...)
  2024-07-30  5:07 ` EarldridgeJazzedPineda
@ 2024-07-30 23:50 ` EarldridgeJazzedPineda
  2024-07-31  0:03 ` EarldridgeJazzedPineda
                   ` (43 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-30 23:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1719 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package and enable the following services:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Known issues
* Some, but not all of the indicators work. unity-panel-service has to be started manually.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 359495 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/40] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/40] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/40] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/40] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/40] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/40] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/40] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/40] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/40] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/40] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/40] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/40] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/40] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/40] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From c9baa0dcd290733053b22f9fe99be9d226f53aa4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/40] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 2b13adf79df6797c170e245a1f0cc9b4955f0805 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/40] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From 0a05c605ec982071f6a88551321ce06080841361 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/40] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From ef558d6b8e9d17a94a0289b7aef137ab3954629b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/40] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From 67fae035e7647169d7183650a5417f4e65658581 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/40] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From b1c7178c77f1658300bba89d5f1fa160750b1e66 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/40] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 .../patches/use-ayatana-indicator-type.patch  |  8 ++
 srcpkgs/indicator-session/template            | 26 ++++++
 6 files changed, 172 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From da18b9c263f2ff3698d302dc015ce7b26f4b3eb7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/40] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 987c50246c6a4317724b485ce6ecd0500832077a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/40] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 42064edf25728994c8754b7e3adc1502a407cba8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/40] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From e7f9040c210673bda3bbd63c0601a369de13735c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/40] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From adfd20dafd8392e098a6589b8e7c563156c7a2a6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/40] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 3f32e4da64d4e0103772f798abd1dfb276905b15 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/40] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5a14461052c4e1c7c786d273d162409f4a425231 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/40] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From ae8791041c2b969d77513e79401faaaa8f442a2c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/40] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From 7055db46c630b48aece947e226608cab5e16ba8e Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/40] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From 4cd5245fc79b9154c976c97ee9185a2b5a87e862 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/40] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From 4bc1271c7e4ccde7a48b99b4d0fca98ee827c40b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/40] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From c52298dcf0aa558c22081feec34dd476b19a20ae Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/40] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 +++
 17 files changed, 918 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 46aab05803ebb770d35506e8d5155f0910c77774 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/40] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From 29016167dbd06ee624acabff4b6c5bc386a7b698 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/40] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From 3251c93875f642e9fcb507543a9073b18f36d751 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/40] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From 92bc67265722584eb90c946af3d15477cd9731db Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/40] New package: unity-session-46.0

---
 srcpkgs/unity-session/files/unity.desktop     |  6 ++++++
 .../patches/use-gnome-session.patch           | 16 ++++++++++++++
 srcpkgs/unity-session/template                | 21 +++++++++++++++++++
 3 files changed, 43 insertions(+)
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..f3c384a7da5942
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ebf770a01a69a1
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,21 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+}

From 8d81f10fa9e6a73f2abf84bf74ad54d7372651ca Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/40] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From faa41594bc9ee1f4b70deb33491bb6dc23ee50a5 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/40] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From b1c8e2e55671f7889f40eef197e738909f3347cb Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/40] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

From 95a1b18712a4757c0b20bc82d6a554a95fe7347a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 30 Jul 2024 11:34:47 +0800
Subject: [PATCH 40/40] yaru: compile Unity themes

---
 srcpkgs/yaru/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (11 preceding siblings ...)
  2024-07-30 23:50 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-07-31  0:03 ` EarldridgeJazzedPineda
  2024-07-31  0:12 ` EarldridgeJazzedPineda
                   ` (42 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-31  0:03 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 438 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2254385967

Comment:
Indicators just simply refuse to work. Not sure if it has something to do with using libayatana-indicator vs libindicator, because Unity isn't designed to use the former.

EDIT: I was right. Indicators need to have a property 'x-ayatana-type' set to 'org.ayatana.indicator.root'.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (12 preceding siblings ...)
  2024-07-31  0:03 ` EarldridgeJazzedPineda
@ 2024-07-31  0:12 ` EarldridgeJazzedPineda
  2024-07-31  1:21 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (41 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-31  0:12 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 288 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2259399923

Comment:
The HUD did not work because it was referring to "com.canonical.dbusmenu" instead of "org.ayatana.dbusmenu". I will patch it later.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (13 preceding siblings ...)
  2024-07-31  0:12 ` EarldridgeJazzedPineda
@ 2024-07-31  1:21 ` EarldridgeJazzedPineda
  2024-07-31  2:42 ` EarldridgeJazzedPineda
                   ` (40 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-31  1:21 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1834 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic.

#### Known issues
* Some, but not all of the indicators work.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 360863 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/40] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/40] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/40] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/40] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/40] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/40] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/40] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/40] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/40] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/40] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/40] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/40] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/40] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/40] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From c9baa0dcd290733053b22f9fe99be9d226f53aa4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/40] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 2b13adf79df6797c170e245a1f0cc9b4955f0805 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/40] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From 0a05c605ec982071f6a88551321ce06080841361 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/40] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From ef558d6b8e9d17a94a0289b7aef137ab3954629b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/40] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From 67fae035e7647169d7183650a5417f4e65658581 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/40] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From b1c7178c77f1658300bba89d5f1fa160750b1e66 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/40] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 .../patches/use-ayatana-indicator-type.patch  |  8 ++
 srcpkgs/indicator-session/template            | 26 ++++++
 6 files changed, 172 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From da18b9c263f2ff3698d302dc015ce7b26f4b3eb7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/40] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 987c50246c6a4317724b485ce6ecd0500832077a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/40] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 42064edf25728994c8754b7e3adc1502a407cba8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/40] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From e7f9040c210673bda3bbd63c0601a369de13735c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/40] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From adfd20dafd8392e098a6589b8e7c563156c7a2a6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/40] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 3f32e4da64d4e0103772f798abd1dfb276905b15 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/40] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5a14461052c4e1c7c786d273d162409f4a425231 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/40] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From ae8791041c2b969d77513e79401faaaa8f442a2c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/40] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From 7055db46c630b48aece947e226608cab5e16ba8e Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/40] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From 4cd5245fc79b9154c976c97ee9185a2b5a87e862 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/40] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From 4bc1271c7e4ccde7a48b99b4d0fca98ee827c40b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/40] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From c52298dcf0aa558c22081feec34dd476b19a20ae Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/40] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 +++
 17 files changed, 918 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 46aab05803ebb770d35506e8d5155f0910c77774 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/40] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From 29016167dbd06ee624acabff4b6c5bc386a7b698 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/40] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From 3251c93875f642e9fcb507543a9073b18f36d751 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/40] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From c6418a05eafdd77a52a544864407b5ed4243d175 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/40] New package: unity-session-46.0

---
 .../files/indicator-session.desktop           |  6 +++++
 .../files/unity-panel-service.desktop         |  6 +++++
 srcpkgs/unity-session/files/unity.desktop     |  6 +++++
 .../patches/use-gnome-session.patch           | 16 +++++++++++++
 srcpkgs/unity-session/template                | 24 +++++++++++++++++++
 5 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..0d174c82b22802
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-session;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..5ebb30b381bccc
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,24 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}

From dd4f243fc585dda0d30ab9dff9f1030abc958c62 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/40] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 29dcb70675a1b77423366868edfdba0392caa66a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/40] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From b9eff6d7c77e847ee9a8b34f14dbeb4d0e425140 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/40] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

From 194602ee9af6a19af6d31aadbd5290cd24fa5ac3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 30 Jul 2024 11:34:47 +0800
Subject: [PATCH 40/40] yaru: compile Unity themes

---
 srcpkgs/yaru/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (14 preceding siblings ...)
  2024-07-31  1:21 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-07-31  2:42 ` EarldridgeJazzedPineda
  2024-07-31  3:21 ` EarldridgeJazzedPineda
                   ` (39 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-31  2:42 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1834 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic.

#### Known issues
* Some, but not all of the indicators work.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 363221 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/40] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/40] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/40] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/40] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/40] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/40] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/40] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/40] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/40] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/40] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/40] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/40] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/40] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/40] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From a74c6f8672f08901a0946970c682ccb5fd253146 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/40] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 .../patches/use-ayatana-indicator-type.patch  | 20 ++++++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 4 files changed, 65 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 01e190e196238cc639724016967073c4fa53665e Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/40] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From f08bee6e1513b70dac30cdcc68ee6d9dcfc8eb6c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/40] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From 8e7f543702ae4dd3d58999eaf1aa40f777b2419f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/40] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From a2c7d89f7d6fb2a961b5cc8140ec32b7f8785645 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/40] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From 4ada00d2f7651bace183b8b10acd342189f68d38 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/40] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 .../patches/use-ayatana-indicator-type.patch  |  8 ++
 srcpkgs/indicator-session/template            | 26 ++++++
 6 files changed, 172 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From 751e09292a134553f7e20e88b733a3862418c36c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/40] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 721aa1e5b8341696ead8f45699172cc16804b456 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/40] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 04978b8db372169325451662fd9129a9bf1f76be Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/40] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 272c149d8c9a2f3883c2fa9906655d67e773e397 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/40] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 66a9f982d1446d09e37e01f118547da7fcc0fcee Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/40] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d61e1569bb5d3bc8537d7ed4b364fa5c47bb2c1a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/40] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 96ac2df35825d914f5167e0fa7598c24a6c9e839 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/40] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From cf013b9f9bbf76828bdfd1925af236bd11145bf1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/40] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From e2f117fd2dbe37c79bcff0ae3c2e54e986931c98 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/40] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From 2fc5ef4ed7351c10f9a3500defbc3b8f29cf8593 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/40] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From c74601fb7a94879c81b92f3a6665b1660f0ff3d9 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/40] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From d30f358e085cc0386bc476b7bbad6f681c5694d1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/40] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 +++
 17 files changed, 918 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From e964e41859b441579cd8196e519816aadc1186ee Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/40] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From e0d4ba8ca94f3aeea8d70547e65ad80177893df2 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/40] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From bc0a7dfcf36c32fed9b68fad680dfb46d33770ac Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/40] New package: unity-indicator-appearance-1.2

---
 srcpkgs/unity-indicator-appearance/template | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..2ab725bd25a0dd
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,14 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy "*" ""
+}

From 33c1d2cb38504deb25f3687757993bbf20ce1635 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/40] New package: unity-session-46.0

---
 .../files/indicator-datetime.desktop          |  6 +++++
 .../files/indicator-session.desktop           |  6 +++++
 .../files/unity-panel-service.desktop         |  6 +++++
 srcpkgs/unity-session/files/unity.desktop     |  6 +++++
 .../patches/use-gnome-session.patch           | 16 ++++++++++++
 srcpkgs/unity-session/template                | 25 +++++++++++++++++++
 6 files changed, 65 insertions(+)
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..984414fa63c0f1
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-datetime;indicator-session;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..0b2690f972ea80
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,25 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}

From cc5c4373056d583431bf92b7ff1ccf42817fffd7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/40] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 950b71a50771cade733b4c9c5a86543d1776dafc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/40] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From 2894e34032345e1e6520caa48cd95eb9a3bc0d3b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/40] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

From 085a0801d09d14c16d1f44d746dcdc2215e009de Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 30 Jul 2024 11:34:47 +0800
Subject: [PATCH 40/40] yaru: compile Unity themes

---
 srcpkgs/yaru/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (15 preceding siblings ...)
  2024-07-31  2:42 ` EarldridgeJazzedPineda
@ 2024-07-31  3:21 ` EarldridgeJazzedPineda
  2024-07-31  3:29 ` EarldridgeJazzedPineda
                   ` (38 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-31  3:21 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1965 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic.

#### Known issues
* Some, but not all of the indicators work.
* The date/time indicator has a broken calendar and depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 364581 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/40] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/40] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/40] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/40] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/40] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/40] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/40] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/40] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/40] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/40] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/40] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/40] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/40] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/40] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From a74c6f8672f08901a0946970c682ccb5fd253146 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/40] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 .../patches/use-ayatana-indicator-type.patch  | 20 ++++++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 4 files changed, 65 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 01e190e196238cc639724016967073c4fa53665e Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/40] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From f08bee6e1513b70dac30cdcc68ee6d9dcfc8eb6c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/40] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From 8e7f543702ae4dd3d58999eaf1aa40f777b2419f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/40] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From a2c7d89f7d6fb2a961b5cc8140ec32b7f8785645 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/40] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From 4ada00d2f7651bace183b8b10acd342189f68d38 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/40] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 .../patches/use-ayatana-indicator-type.patch  |  8 ++
 srcpkgs/indicator-session/template            | 26 ++++++
 6 files changed, 172 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From 751e09292a134553f7e20e88b733a3862418c36c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/40] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 721aa1e5b8341696ead8f45699172cc16804b456 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/40] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 04978b8db372169325451662fd9129a9bf1f76be Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/40] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 272c149d8c9a2f3883c2fa9906655d67e773e397 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/40] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 66a9f982d1446d09e37e01f118547da7fcc0fcee Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/40] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d61e1569bb5d3bc8537d7ed4b364fa5c47bb2c1a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/40] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 96ac2df35825d914f5167e0fa7598c24a6c9e839 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/40] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From cf013b9f9bbf76828bdfd1925af236bd11145bf1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/40] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From e2f117fd2dbe37c79bcff0ae3c2e54e986931c98 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/40] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From 2fc5ef4ed7351c10f9a3500defbc3b8f29cf8593 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/40] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From c74601fb7a94879c81b92f3a6665b1660f0ff3d9 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/40] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From d30f358e085cc0386bc476b7bbad6f681c5694d1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/40] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 +++
 17 files changed, 918 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From e964e41859b441579cd8196e519816aadc1186ee Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/40] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From e0d4ba8ca94f3aeea8d70547e65ad80177893df2 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/40] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From e07bac5b9afed5af0608ecc2e61c354c4ec88f27 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/40] New package: unity-indicator-appearance-1.2

---
 .../patches/use-ayatana-libraries.patch        | 18 ++++++++++++++++++
 srcpkgs/unity-indicator-appearance/template    | 15 +++++++++++++++
 2 files changed, 33 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}

From 928afa0bcab7b80403aaad3ee10a4021343dd5cc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/40] New package: unity-session-46.0

---
 .../files/indicator-datetime.desktop          |  6 +++++
 .../files/indicator-session.desktop           |  6 +++++
 .../files/unity-panel-service.desktop         |  6 +++++
 srcpkgs/unity-session/files/unity.desktop     |  6 +++++
 .../patches/use-gnome-session.patch           | 16 ++++++++++++
 srcpkgs/unity-session/template                | 25 +++++++++++++++++++
 6 files changed, 65 insertions(+)
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..984414fa63c0f1
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-datetime;indicator-session;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..0b2690f972ea80
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,25 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}

From be34ac206aa7d494b53378e0017468824b47b300 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/40] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 0493e27ff62a5ee69147011d2a1208daad95c158 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/40] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From a32e0de09679532024b2fa8c1fd050f67df8953d Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/40] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

From a8d2b7437fde6edf2e53ae2860041b726eacb020 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 30 Jul 2024 11:34:47 +0800
Subject: [PATCH 40/40] yaru: compile Unity themes

---
 srcpkgs/yaru/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (16 preceding siblings ...)
  2024-07-31  3:21 ` EarldridgeJazzedPineda
@ 2024-07-31  3:29 ` EarldridgeJazzedPineda
  2024-07-31  9:24 ` EarldridgeJazzedPineda
                   ` (37 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-31  3:29 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1965 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic.

#### Known issues
* Some, but not all of the indicators work.
* The date/time indicator has a broken calendar and depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 365296 bytes --]

From 4263c67c4c4d8af2b1843784b088ca69d147df0f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 19 Jul 2024 18:31:59 +0800
Subject: [PATCH 01/40] New package: dbus-activation-env-1.14.10

---
 .../patches/remove-systemd.patch                 | 12 ++++++++++++
 srcpkgs/dbus-activation-env/template             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template

diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}

From 2c30dd01a091776e838f075200c485c144ef2cfa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 07:33:15 +0800
Subject: [PATCH 02/40] New package: unity-gtk-module-0.0.0+18.04.20171202

---
 common/shlibs                                 |  1 +
 srcpkgs/unity-gtk-module-devel                |  1 +
 .../files/unity-gtk-module/finish             |  3 ++
 .../files/unity-gtk-module/run                |  3 ++
 srcpkgs/unity-gtk-module/template             | 35 +++++++++++++++++++
 5 files changed, 43 insertions(+)
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template

diff --git a/common/shlibs b/common/shlibs
index 045ddaf9a0e818..c95e707499f057 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4529,3 +4529,4 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 7970c2e1d92c3f00e1b2769553bc91cb076b7d9a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 20 Jul 2024 09:43:17 +0800
Subject: [PATCH 03/40] New package: dee-1.2.7+17.10.20170616

---
 common/shlibs                                 |   1 +
 srcpkgs/dee-devel                             |   1 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 6 files changed, 1006 insertions(+)
 create mode 120000 srcpkgs/dee-devel
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template

diff --git a/common/shlibs b/common/shlibs
index c95e707499f057..e6092e6ae513d5 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4530,3 +4530,4 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 59f460c9d2b0a30e1dd8c7db15e5e362ea7e01bc Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:23:18 +0800
Subject: [PATCH 04/40] New package: libunity-7.1.4+19.04.20190319

---
 common/shlibs                                 |   3 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +++
 .../patches/libunity-ubuntu-patches.patch     | 153 ++++++++++++++++++
 srcpkgs/libunity/template                     |  47 ++++++
 5 files changed, 224 insertions(+)
 create mode 120000 srcpkgs/libunity-devel
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template

diff --git a/common/shlibs b/common/shlibs
index e6092e6ae513d5..5444f7c552c915 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4531,3 +4531,6 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
 libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d8f69f40217da89aa2f94d408a07bd238443f3a4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:02:55 +0800
Subject: [PATCH 05/40] New package: libunity-misc-4.0.5+14.04.20140115

---
 common/shlibs                                 |  1 +
 srcpkgs/libunity-misc-devel                   |  1 +
 .../patches/0001_autotools.patch              | 11 +++++++
 srcpkgs/libunity-misc/template                | 31 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template

diff --git a/common/shlibs b/common/shlibs
index 5444f7c552c915..7d962006766171 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4534,3 +4534,4 @@ libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
 libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 24bcf50826b6e9fb71764f72d9f1b4107d286eab Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 14:09:00 +0800
Subject: [PATCH 06/40] New package: indicator-messages-13.10.1+18.10.20180918

---
 common/shlibs                                 |  1 +
 srcpkgs/indicator-messages-devel              |  1 +
 .../patches/0001-autoconf-fix.patch           | 25 +++++++++++++
 .../patches/0002-Disable-tests.patch          | 25 +++++++++++++
 srcpkgs/indicator-messages/template           | 35 +++++++++++++++++++
 5 files changed, 87 insertions(+)
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template

diff --git a/common/shlibs b/common/shlibs
index 7d962006766171..9ff13dcb30d137 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4535,3 +4535,4 @@ libunity.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From 2e1d30d432ed66c5e030bba6c2f18318b870046c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 21 Jul 2024 15:05:33 +0800
Subject: [PATCH 07/40] New package:
 gsettings-ubuntu-schemas-0.0.7+21.10.20210712

---
 srcpkgs/gsettings-ubuntu-schemas-devel        |  1 +
 .../files/50-com.ubuntu.AccountsService.rules | 29 ++++++++++++++++
 srcpkgs/gsettings-ubuntu-schemas/template     | 34 +++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template

diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}

From 79c91aac1114c17d06c1f8daa420a0540e03b853 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 09:11:46 +0800
Subject: [PATCH 08/40] New package:
 unity-settings-daemon-15.04.1+21.10.20220802

---
 common/shlibs                                 |   1 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 ++++++++++++++++++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 ++++
 srcpkgs/unity-settings-daemon/template        |  61 ++++++++
 6 files changed, 220 insertions(+)
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template

diff --git a/common/shlibs b/common/shlibs
index 9ff13dcb30d137..047bdce27ee9ba 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4536,3 +4536,4 @@ libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
 libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 5140c8145f3b2031da76b3f6c6685d845fefec4b Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 10:00:06 +0800
Subject: [PATCH 09/40] New package: libgeonames-0.3.1

---
 common/shlibs                |  1 +
 srcpkgs/libgeonames-devel    |  1 +
 srcpkgs/libgeonames/template | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+)
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template

diff --git a/common/shlibs b/common/shlibs
index 047bdce27ee9ba..0d492a85db2e18 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4537,3 +4537,4 @@ libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
 libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From bf354ac974f6edc2e718a345d114a392b7c6ca70 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 14:18:13 +0800
Subject: [PATCH 10/40] New package:
 unity-control-center-15.04.0+23.04.20230220

---
 common/shlibs                                 |   2 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++++++
 .../files/unity-online-accounts-panel.desktop | 197 +++++++++++
 .../files/unity-region-panel.desktop          | 206 ++++++++++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++++
 .../patches/0002-Skip-region-panel.patch      |  24 ++
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++++++++++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 ++
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +++
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +++
 .../patches/fix-goa-function-calls.patch      |  29 ++
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++++
 15 files changed, 1199 insertions(+)
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template

diff --git a/common/shlibs b/common/shlibs
index 0d492a85db2e18..2b0ea7129670d1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4538,3 +4538,5 @@ libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
 libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
 libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}

From 5327afa8579ff7cafab4dbd3b1827682ec38603a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 16:57:56 +0800
Subject: [PATCH 11/40] New package: properties-cpp-0.0.3

---
 srcpkgs/properties-cpp/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/properties-cpp/template

diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}

From a4f4c0c5a71f7f7ba632a5ceb7ff3fd68299a2f0 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 17:25:39 +0800
Subject: [PATCH 12/40] New package: unity-api-8.7+17.04.20170404

---
 common/shlibs              |  1 +
 srcpkgs/unity-api-devel    |  1 +
 srcpkgs/unity-api/template | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+)
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template

diff --git a/common/shlibs b/common/shlibs
index 2b0ea7129670d1..8309d44de27f9d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4540,3 +4540,4 @@ libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
 libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 4d85259c6ee98c80feb7a0e550e24038a7b5b2e6 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Mon, 22 Jul 2024 18:18:50 +0800
Subject: [PATCH 13/40] New package:
 indicator-application-12.10.1+19.04.20190308.1

---
 .../patches/0001_autoconf.patch               | 12 ++++
 .../patches/use-ayatana-libraries.patch       | 61 +++++++++++++++++++
 srcpkgs/indicator-application/template        | 20 ++++++
 3 files changed, 93 insertions(+)
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template

diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}

From 25d627bd4655e3fcfdaebab27f9094d81fc9c9f8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 23 Jul 2024 22:11:46 +0800
Subject: [PATCH 14/40] New package: indicator-appmenu-15.02.0+20.10.20200617.2

---
 .../patches/0001_autoconf.patch               | 12 +++++
 .../patches/use-ayatana-libraries.patch       | 46 +++++++++++++++++++
 srcpkgs/indicator-appmenu/template            | 24 ++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template

diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}

From a74c6f8672f08901a0946970c682ccb5fd253146 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 11:48:38 +0800
Subject: [PATCH 15/40] New package: indicator-datetime-15.10+21.04.20210304

---
 .../files/indicator-datetime/run              |  2 ++
 .../patches/disable-tests.patch               | 16 +++++++++++
 .../patches/use-ayatana-indicator-type.patch  | 20 ++++++++++++++
 srcpkgs/indicator-datetime/template           | 27 +++++++++++++++++++
 4 files changed, 65 insertions(+)
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template

diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}

From 01e190e196238cc639724016967073c4fa53665e Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 12:23:46 +0800
Subject: [PATCH 16/40] New package: indicator-keyboard-0.0.0+19.10.20220803

---
 ...-depending-on-accountsservices-patch.patch |  68 +++++++
 ...le-DBus-method-activate_input_source.patch | 176 ++++++++++++++++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +++++
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +++
 srcpkgs/indicator-keyboard/template           |  27 +++
 5 files changed, 353 insertions(+)
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template

diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}

From f08bee6e1513b70dac30cdcc68ee6d9dcfc8eb6c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 13:09:22 +0800
Subject: [PATCH 17/40] New package: indicator-power-12.10.6+17.10.20170829.1

---
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++++++++++++++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +++
 4 files changed, 234 insertions(+)
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template

diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}

From 8e7f543702ae4dd3d58999eaf1aa40f777b2419f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:18:00 +0800
Subject: [PATCH 18/40] New package: indicator-printers-0.1.7+17.10.20171101

---
 .../patches/use-ayatana-libraries.patch       | 45 +++++++++++++++++++
 srcpkgs/indicator-printers/template           | 35 +++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template

diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}

From a2c7d89f7d6fb2a961b5cc8140ec32b7f8785645 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 16:53:33 +0800
Subject: [PATCH 19/40] New package: cmake-extras-1.7

---
 srcpkgs/cmake-extras/template | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 srcpkgs/cmake-extras/template

diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3

From 4ada00d2f7651bace183b8b10acd342189f68d38 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Wed, 24 Jul 2024 17:24:20 +0800
Subject: [PATCH 20/40] New package: indicator-session-17.3.20+21.10.20210613.1

---
 .../files/indicator-session/run               |  2 +
 .../patches/0001-There-is-no-help.patch       | 80 +++++++++++++++++++
 .../0003-Remove-libwhoopsie-dependency.patch  | 49 ++++++++++++
 .../patches/include-cstdint.patch             |  7 ++
 .../patches/use-ayatana-indicator-type.patch  |  8 ++
 srcpkgs/indicator-session/template            | 26 ++++++
 6 files changed, 172 insertions(+)
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template

diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}

From 751e09292a134553f7e20e88b733a3862418c36c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:14:03 +0800
Subject: [PATCH 21/40] New package: indicator-sound-12.10.2+18.10.20180612

---
 .../indicator-sound/files/indicator-sound/run |  2 +
 srcpkgs/indicator-sound/template              | 42 +++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template

diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}

From 721aa1e5b8341696ead8f45699172cc16804b456 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 12:54:39 +0800
Subject: [PATCH 22/40] New package: gsettings-qt-0.2

---
 common/shlibs                 |  1 +
 srcpkgs/gsettings-qt-devel    |  1 +
 srcpkgs/gsettings-qt/template | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+)
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template

diff --git a/common/shlibs b/common/shlibs
index 8309d44de27f9d..5fc61025be1f0f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4541,3 +4541,4 @@ libgeonames.so.0 libgeonames-0.3.1_1
 libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 04978b8db372169325451662fd9129a9bf1f76be Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:12:05 +0800
Subject: [PATCH 23/40] New package: dee-qt-3.3+14.04.20140317

---
 common/shlibs           |  1 +
 srcpkgs/dee-qt-devel    |  1 +
 srcpkgs/dee-qt/template | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template

diff --git a/common/shlibs b/common/shlibs
index 5fc61025be1f0f..0073eb880de9dd 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4542,3 +4542,4 @@ libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
 libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 272c149d8c9a2f3883c2fa9906655d67e773e397 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 13:27:12 +0800
Subject: [PATCH 24/40] New package: libcolumbus-1.1.0+15.10.20150806

---
 common/shlibs                |  1 +
 srcpkgs/libcolumbus-devel    |  1 +
 srcpkgs/libcolumbus/template | 26 ++++++++++++++++++++++++++
 3 files changed, 28 insertions(+)
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template

diff --git a/common/shlibs b/common/shlibs
index 0073eb880de9dd..e92a7369ef81ac 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4543,3 +4543,4 @@ libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
 libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 66a9f982d1446d09e37e01f118547da7fcc0fcee Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 18:56:38 +0800
Subject: [PATCH 25/40] New package: hud-14.10+17.10.20170619

---
 common/shlibs                                 |  3 +
 srcpkgs/hud-devel                             |  1 +
 srcpkgs/hud/files/hud/run                     |  2 +
 srcpkgs/hud/files/window-stack-bridge/run     |  2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   | 58 +++++++++++++++++++
 .../0002-Remove-test-dependencies.patch       | 29 ++++++++++
 .../hud/patches/fix-systemd-user-dir.patch    |  8 +++
 srcpkgs/hud/template                          | 56 ++++++++++++++++++
 8 files changed, 159 insertions(+)
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template

diff --git a/common/shlibs b/common/shlibs
index e92a7369ef81ac..b56da4289e3995 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4544,3 +4544,6 @@ libunity-api.so.0 unity-api-8.7+17.04.20170404_1
 libgsettings-qt.so.1 gsettings-qt-0.2_1
 libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
 libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}

From d61e1569bb5d3bc8537d7ed4b364fa5c47bb2c1a Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 25 Jul 2024 20:06:06 +0800
Subject: [PATCH 26/40] New package: glewmx-1.13.0

---
 common/shlibs           |  2 ++
 srcpkgs/glewmx-devel    |  1 +
 srcpkgs/glewmx/template | 67 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+)
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template

diff --git a/common/shlibs b/common/shlibs
index b56da4289e3995..f443d102eeabbe 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4547,3 +4547,5 @@ libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
 libhud-client.so.2 hud-14.10+17.10.20170619_1
 libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From 96ac2df35825d914f5167e0fa7598c24a6c9e839 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 08:04:01 +0800
Subject: [PATCH 27/40] New package: nux-4.0.8+18.10.20180623

---
 common/shlibs                                 |  3 +
 srcpkgs/nux-devel                             |  1 +
 srcpkgs/nux/files/50_check_unity_support      |  6 ++
 srcpkgs/nux/patches/0001_autoconf.patch       | 12 ++++
 .../add_setupframebufferobject_clear.patch    | 13 ++++
 srcpkgs/nux/patches/use_glewmx.patch          | 35 +++++++++++
 srcpkgs/nux/template                          | 59 +++++++++++++++++++
 7 files changed, 129 insertions(+)
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template

diff --git a/common/shlibs b/common/shlibs
index f443d102eeabbe..9e3aebf36aaae8 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4549,3 +4549,6 @@ libhud.so.2 hud-14.10+17.10.20170619_1
 libhud-gtk.so.1 hud-14.10+17.10.20170619_1
 libGLEW.so.1.13 glewmx-1.13.0_1
 libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From cf013b9f9bbf76828bdfd1925af236bd11145bf1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 09:31:38 +0800
Subject: [PATCH 28/40] New package: unity-asset-pool-0.8.24+17.10.20170507

---
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 ++++++++++++++++++
 3 files changed, 30 insertions(+)
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}

From e2f117fd2dbe37c79bcff0ae3c2e54e986931c98 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 12:52:53 +0800
Subject: [PATCH 29/40] New package: compiz-ubuntu-0.9.14.2+22.10.20220822

---
 common/shlibs                                 |  4 ++
 srcpkgs/compiz-ubuntu-devel                   |  1 +
 .../0001-Fix-cmake-install-directory.patch    | 34 ++++++++++
 .../patches/0004-Disable-Werror.patch         | 25 +++++++
 srcpkgs/compiz-ubuntu/template                | 68 +++++++++++++++++++
 5 files changed, 132 insertions(+)
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template

diff --git a/common/shlibs b/common/shlibs
index 9e3aebf36aaae8..7f51c40cc09fa0 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3043,6 +3043,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4552,3 +4555,4 @@ libGLEWmx.so.1.13 glewmx-1.13.0_1
 libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}

From 2fc5ef4ed7351c10f9a3500defbc3b8f29cf8593 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:08:56 +0800
Subject: [PATCH 30/40] New package: lightdm-unity-greeter-23.10.1

---
 .../files/10-unity.defaults                   |  31 +++++
 .../files/50-unity-greeter.rules              |  98 +++++++++++++++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 ++
 .../patches/use-ayatana-libraries.patch       | 114 ++++++++++++++++++
 .../patches/use-runit.patch                   |   9 ++
 srcpkgs/lightdm-unity-greeter/template        |  47 ++++++++
 7 files changed, 310 insertions(+)
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template

diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}

From c74601fb7a94879c81b92f3a6665b1660f0ff3d9 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Fri, 26 Jul 2024 18:37:09 +0800
Subject: [PATCH 31/40] New package: libglvnd-1.4.0-1.4.0

---
 srcpkgs/libglvnd-1.4.0-devel                  |  1 +
 .../patches/musl-noasm-use-o0.patch           | 41 +++++++++++++++++++
 srcpkgs/libglvnd-1.4.0/template               | 38 +++++++++++++++++
 3 files changed, 80 insertions(+)
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template

diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}

From d30f358e085cc0386bc476b7bbad6f681c5694d1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 21:14:00 +0800
Subject: [PATCH 32/40] New package: unity-7.7.0+23.04.20230222.2

---
 common/shlibs                                 |   9 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 ++++++++++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 ++
 .../unity/patches/use-ayatana-libraries.patch |  90 +++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 +++
 17 files changed, 918 insertions(+)
 create mode 120000 srcpkgs/unity-devel
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 7f51c40cc09fa0..15b2e4530c1320 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4556,3 +4556,12 @@ libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
 libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}

From e964e41859b441579cd8196e519816aadc1186ee Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:17:28 +0800
Subject: [PATCH 33/40] New package: indicator-bluetooth-0.0.6+17.10.20170605

---
 .../patches/remove-urldispatch.patch          | 25 ++++++++++++++
 srcpkgs/indicator-bluetooth/template          | 33 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template

diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}

From e0d4ba8ca94f3aeea8d70547e65ad80177893df2 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 22:51:50 +0800
Subject: [PATCH 34/40] New package: unity-backgrounds-24.04

---
 srcpkgs/unity-backgrounds/template | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 srcpkgs/unity-backgrounds/template

diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}

From e07bac5b9afed5af0608ecc2e61c354c4ec88f27 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sat, 27 Jul 2024 23:13:12 +0800
Subject: [PATCH 35/40] New package: unity-indicator-appearance-1.2

---
 .../patches/use-ayatana-libraries.patch        | 18 ++++++++++++++++++
 srcpkgs/unity-indicator-appearance/template    | 15 +++++++++++++++
 2 files changed, 33 insertions(+)
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template

diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}

From f2b537be6d600f88b2ff2f065ea1af1eba2a8ecb Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:35:31 +0800
Subject: [PATCH 36/40] New package: unity-session-46.0

---
 .../files/indicator-datetime.desktop          |  6 +++++
 .../files/indicator-session.desktop           |  6 +++++
 .../files/unity-indicator-appearance.desktop  |  6 +++++
 .../files/unity-panel-service.desktop         |  6 +++++
 srcpkgs/unity-session/files/unity.desktop     |  6 +++++
 .../patches/use-gnome-session.patch           | 16 ++++++++++++
 srcpkgs/unity-session/template                | 26 +++++++++++++++++++
 7 files changed, 72 insertions(+)
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template

diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..1bfd974d994cbe
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-datetime;indicator-session;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..11555783f1172b
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,26 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}

From 951ec539c802f6f53e3995b45ebbd3f32ec2fd37 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 10:52:47 +0800
Subject: [PATCH 37/40] New package: unity-settings-22.10

---
 .../files/10_ubuntu-settings.gschema.override | 223 ++++++++++++++++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +++
 srcpkgs/unity-settings/template               |  20 ++
 3 files changed, 278 insertions(+)
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template

diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}

From 9cbf60af7f24b0630b9866be060d0a5b4a2dcf01 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 11:58:56 +0800
Subject: [PATCH 38/40] New package: unity-tweak-tool-0.0.7+

---
 srcpkgs/unity-tweak-tool/template | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 srcpkgs/unity-tweak-tool/template

diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}

From 598e8ef256de7f6e618c60ae8bb14664f38e4568 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Sun, 28 Jul 2024 13:18:15 +0800
Subject: [PATCH 39/40] New package: unity-core-1

---
 srcpkgs/unity-core/template | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
 create mode 100644 srcpkgs/unity-core/template

diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"

From 703a5e7ef7f170a885e3ebe666fe18b83a365036 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Tue, 30 Jul 2024 11:34:47 +0800
Subject: [PATCH 40/40] yaru: compile Unity themes

---
 srcpkgs/yaru/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (17 preceding siblings ...)
  2024-07-31  3:29 ` EarldridgeJazzedPineda
@ 2024-07-31  9:24 ` EarldridgeJazzedPineda
  2024-08-01 11:59 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (36 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-07-31  9:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 279 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2260066012

Comment:
Can I squash all of the commits? 40 commits feels like too much and I don't to rebase for every package I make changes to.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (18 preceding siblings ...)
  2024-07-31  9:24 ` EarldridgeJazzedPineda
@ 2024-08-01 11:59 ` EarldridgeJazzedPineda
  2024-08-01 11:59 ` EarldridgeJazzedPineda
                   ` (35 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-01 11:59 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2668 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* "Void Desktop" does not appear in the top panel.
* Desktop icons do not appear.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators uses IDOs (indicator display objects) and they do not render.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* The Online Accounts section of Unity Control Center is buggy. (https://pad.lv/2055461)
* Nothing happens when Region & Language is clicked (because it can't open gnome-control-center).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 347075 bytes --]

From afd64b749fc76493bec897b120187d8e59144402 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 srcpkgs/indicator-bluetooth/template          |  33 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  35 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libglvnd-1.4.0-devel                  |   1 +
 .../patches/musl-noasm-use-o0.patch           |  41 +
 srcpkgs/libglvnd-1.4.0/template               |  38 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/fix-goa-function-calls.patch      |  29 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++
 srcpkgs/unity-core/template                   |  16 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  26 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  19 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 152 files changed, 6540 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 6f378121d0e4f4..4489c11637b35d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3036,6 +3036,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4522,3 +4525,36 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..1bfd974d994cbe
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-datetime;indicator-session;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..11555783f1172b
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,26 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (19 preceding siblings ...)
  2024-08-01 11:59 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-08-01 11:59 ` EarldridgeJazzedPineda
  2024-08-01 12:00 ` EarldridgeJazzedPineda
                   ` (34 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-01 11:59 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 280 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2260066012

Comment:
I've sqaushed all of the commits. 40 commits feels like too much and I don't to rebase for every package I make changes to.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (20 preceding siblings ...)
  2024-08-01 11:59 ` EarldridgeJazzedPineda
@ 2024-08-01 12:00 ` EarldridgeJazzedPineda
  2024-08-01 12:08 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (33 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-01 12:00 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 285 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2260066012

Comment:
I've sqaushed all of the commits. 40 commits feels like too much and I don't want to rebase for every package I make changes to.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (21 preceding siblings ...)
  2024-08-01 12:00 ` EarldridgeJazzedPineda
@ 2024-08-01 12:08 ` EarldridgeJazzedPineda
  2024-08-01 12:51 ` EarldridgeJazzedPineda
                   ` (32 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-01 12:08 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2668 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* "Void Desktop" does not appear in the top panel.
* Desktop icons do not appear.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators uses IDOs (indicator display objects) and they do not render.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* The Online Accounts section of Unity Control Center is buggy. (https://pad.lv/2055461)
* Nothing happens when Region & Language is clicked (because it can't open gnome-control-center).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 364533 bytes --]

From fa8869e279064a5e0965f13651e46e2ca2682be4 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 srcpkgs/indicator-bluetooth/template          |  33 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  35 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libglvnd-1.4.0-devel                  |   1 +
 .../patches/musl-noasm-use-o0.patch           |  41 +
 srcpkgs/libglvnd-1.4.0/template               |  38 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/fix-goa-function-calls.patch      |  29 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  63 ++
 srcpkgs/unity-core/template                   |  16 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  27 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  19 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 154 files changed, 6779 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libglvnd-1.4.0-devel
 create mode 100644 srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
 create mode 100644 srcpkgs/libglvnd-1.4.0/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 6f378121d0e4f4..4489c11637b35d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3036,6 +3036,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4522,3 +4525,36 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libglvnd-1.4.0-devel b/srcpkgs/libglvnd-1.4.0-devel
new file mode 120000
index 00000000000000..22294d651c6cd4
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0-devel
@@ -0,0 +1 @@
+libglvnd-1.4.0
\ No newline at end of file
diff --git a/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
new file mode 100644
index 00000000000000..ecfc90aaf9cfe6
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/patches/musl-noasm-use-o0.patch
@@ -0,0 +1,41 @@
+lower optimization for dispatch code when using C
+
+there appears to be some bug in the code which causes crashes
+with threaded opengl setups; this manifests at least on ppc64(le)
+with musl, using either tsd or tls. I haven't been able to track
+it down yet, but this workaround at least makes it stop happening.
+
+--- a/src/GLdispatch/vnd-glapi/meson.build
++++ b/src/GLdispatch/vnd-glapi/meson.build
+@@ -35,8 +35,10 @@ else
+ endif
+ 
+ _entry_files = []
++_extra_cflags = []
+ if gl_dispatch_type == 'pure_c'
+   _entry_files += 'entry_pure_c.c'
++  _extra_cflags += '-O0'
+ else
+   _entry_files += 'entry_common.c'
+   if gl_dispatch_type != 'armv7_tsd'
+@@ -73,7 +77,7 @@ libglapi = static_library(
+     glapi_mapi_tmp_h,
+     _entry_files,
+   ],
+-  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())],
++  c_args : ['-DMAPI_ABI_HEADER="@0@"'.format(glapi_mapi_tmp_h.full_path())] + _extra_cflags,
+   include_directories : inc_include,
+   dependencies : idep_utils_misc,
+   gnu_symbol_visibility : 'hidden',
+@@ -89,7 +93,7 @@ foreach g : ['gl', 'opengl', 'glesv1', 'glesv2']
+     c_args : [
+       '-DSTATIC_DISPATCH_ONLY',
+       '-DMAPI_ABI_HEADER="@0@"'.format(header.full_path()),
+-    ],
++    ] + _extra_cflags,
+     include_directories : [inc_include, inc_util],
+     gnu_symbol_visibility : 'hidden',
+   )
+-- 
+2.31.1
+
diff --git a/srcpkgs/libglvnd-1.4.0/template b/srcpkgs/libglvnd-1.4.0/template
new file mode 100644
index 00000000000000..0efe0017c9b91d
--- /dev/null
+++ b/srcpkgs/libglvnd-1.4.0/template
@@ -0,0 +1,38 @@
+# Template file for 'libglvnd-1.4.0'
+pkgname=libglvnd-1.4.0
+version=1.4.0
+revision=1
+build_style=meson
+hostmakedepends="pkg-config"
+makedepends="libXext-devel libX11-devel xorgproto"
+checkdepends="xvfb-run"
+short_desc="GL Vendor-Neutral Dispatch library"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="custom:MIT-alike"
+homepage="https://gitlab.freedesktop.org/glvnd/libglvnd"
+distfiles="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${version}/libglvnd-v${version}.tar.gz"
+checksum=33b8b993adf47a21bc1c46bcf970927edeb9884390d5b09b1aed051d600c0b2f
+make_check_pre="xvfb-run"
+
+provides="libGL-7.11_1 libEGL-7.11_1 libGLES-7.11_1"
+
+# tls asm requires initial-exec, disable asm for musl
+case "$XBPS_TARGET_MACHINE" in
+	*-musl|arm*|mips*) configure_args+=" -Dasm=disabled";;
+esac
+
+post_install() {
+	grep -A 25 "Copyright (c) 2013, NVIDIA CORPORATION." README.md > LICENSE
+	vlicense LICENSE
+}
+
+libglvnd-1.4.0-devel_package() {
+	depends="${makedepends} ${sourcepkg}-${version}_${revision}"
+	conflicts="MesaLib-devel<19.2.5_2"
+	short_desc+=" - development files"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.so"
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
new file mode 100644
index 00000000000000..822bb4697e8978
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/fix-goa-function-calls.patch
@@ -0,0 +1,29 @@
+diff -p1ru a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c
+--- a/panels/online-accounts/cc-online-accounts-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/online-accounts/cc-online-accounts-panel.c	2024-07-22 13:20:01.399000000 +0800
+@@ -257,7 +257,8 @@ add_account (CcGoaPanel  *self,
+   /* This spins gtk_dialog_run() */
+-  object = goa_provider_add_account (provider,
+-                                     self->client,
+-                                     GTK_DIALOG (self->edit_account_dialog),
+-                                     GTK_BOX (self->new_account_vbox),
+-                                     &error);
++  goa_provider_add_account (provider,
++                            self->client,
++                            GTK_WIDGET (self->edit_account_dialog),
++                            NULL,
++                            NULL,
++                            NULL);
+ 
+@@ -266,5 +267,2 @@ add_account (CcGoaPanel  *self,
+ 
+-  if (object == NULL)
+-    gtk_widget_hide (self->edit_account_dialog);
+-  else
+     show_page_account (self, object);
+@@ -594,3 +592,4 @@ show_page_account (CcGoaPanel  *panel,
+                                  object,
+-                                 GTK_BOX (panel->accounts_vbox),
++                                 GTK_WIDGET (panel->accounts_vbox),
++                                 NULL,
+                                  NULL,
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..9c936813d56c08
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,63 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool ModemManager
+ pkg-config ttf-ubuntu-font-family vala"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gnome-online-accounts-devel gtk+3-devel
+ ibus-devel libcanberra-devel libgeonames-devel libgtop-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ polkit-devel pulseaudio-devel unity-settings-daemon-devel upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager grilo gsettings-desktop-schemas
+ libgnomekbd network-manager-applet NetworkManager smbclient
+ sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # problems with intltool
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..ae24c151ce7001
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-datetime;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..251d3f397cca98
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..232adb59172efd
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd-1.4.0 patchutils
+ pkg-config python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (22 preceding siblings ...)
  2024-08-01 12:08 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-08-01 12:51 ` EarldridgeJazzedPineda
  2024-08-02 13:20 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
                   ` (31 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-01 12:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 288 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2259399923

Comment:
The HUD did not work because it was referring to "com.canonical.dbusmenu" instead of "org.ayatana.dbusmenu". I will patch it later.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (23 preceding siblings ...)
  2024-08-01 12:51 ` EarldridgeJazzedPineda
@ 2024-08-02 13:20 ` EarldridgeJazzedPineda
  2024-08-03  3:08 ` EarldridgeJazzedPineda
                   ` (30 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-02 13:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2668 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* "Void Desktop" does not appear in the top panel.
* Desktop icons do not appear.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators uses IDOs (indicator display objects) and they do not render.
* The HUD works (by pressing Alt), but no search results will appear.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* The Online Accounts section of Unity Control Center is buggy. (https://pad.lv/2055461)
* Nothing happens when Region & Language is clicked (because it can't open gnome-control-center).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 359045 bytes --]

From b40588f0d1bd3e7a24e678788ec6bc6d780b6fe8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 srcpkgs/indicator-bluetooth/template          |  33 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  35 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  16 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  27 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  19 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 150 files changed, 6672 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 6f378121d0e4f4..4489c11637b35d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3036,6 +3036,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4522,3 +4525,36 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..77746ff00d4742
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..ae24c151ce7001
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-datetime;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..251d3f397cca98
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (24 preceding siblings ...)
  2024-08-02 13:20 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
@ 2024-08-03  3:08 ` EarldridgeJazzedPineda
  2024-08-03  3:50 ` EarldridgeJazzedPineda
                   ` (29 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-03  3:08 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2475 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

To log out of Unity, type in `pkill gnome-session` on the Terminal.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Desktop icons do not appear.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators uses IDOs (indicator display objects) and they do not render.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Nothing happens when Online Accounts and Region & Language is clicked (because it can't open gnome-control-center).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 360772 bytes --]

From 31f1f06594dad156f327b03f20838eed8031d0a1 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 srcpkgs/indicator-bluetooth/template          |  33 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  35 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  16 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  28 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  19 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 152 files changed, 6689 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 6f378121d0e4f4..4489c11637b35d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3036,6 +3036,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4522,3 +4525,36 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..8002335387e70f
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool pkg-config python wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..6f7dee6f9e7678
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-datetime;indicator-power;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..26122038ef45ff
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (25 preceding siblings ...)
  2024-08-03  3:08 ` EarldridgeJazzedPineda
@ 2024-08-03  3:50 ` EarldridgeJazzedPineda
  2024-08-03  6:15 ` EarldridgeJazzedPineda
                   ` (28 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-03  3:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2403 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Desktop icons do not appear.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Nothing happens when Online Accounts and Region & Language is clicked (because it can't open gnome-control-center).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 361501 bytes --]

From e558ebe68d88e5d88ba80982c729291a75e92a12 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 srcpkgs/indicator-bluetooth/template          |  33 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  16 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  29 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  19 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 153 files changed, 6698 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 6f378121d0e4f4..4489c11637b35d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3036,6 +3036,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4522,3 +4525,36 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..809b78cb313f32
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,33 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..7a3af4b417138d
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..30262c40f8ed84
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,29 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (26 preceding siblings ...)
  2024-08-03  3:50 ` EarldridgeJazzedPineda
@ 2024-08-03  6:15 ` EarldridgeJazzedPineda
  2024-08-03  8:00 ` EarldridgeJazzedPineda
                   ` (27 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-03  6:15 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2403 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Desktop icons do not appear.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Nothing happens when Online Accounts and Region & Language is clicked (because it can't open gnome-control-center).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 363148 bytes --]

From 3ae4bd7d5a3986032be6a34fe8a232d3dea06044 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  16 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  19 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 155 files changed, 6719 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 6f378121d0e4f4..4489c11637b35d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3036,6 +3036,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4522,3 +4525,36 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..dec03a5437699d
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,16 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter nux
+ unity unity-gtk-module unity-indicator-appearance unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..8d2c7e5a4afd13
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,19 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (27 preceding siblings ...)
  2024-08-03  6:15 ` EarldridgeJazzedPineda
@ 2024-08-03  8:00 ` EarldridgeJazzedPineda
  2024-08-04 23:51 ` EarldridgeJazzedPineda
                   ` (26 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-03  8:00 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2403 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Desktop icons do not appear.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Nothing happens when Online Accounts and Region & Language is clicked (because it can't open gnome-control-center).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 363527 bytes --]

From ab5b43736bab19eec526daccc7c39f75369210d9 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 155 files changed, 6728 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 6f378121d0e4f4..4489c11637b35d 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3036,6 +3036,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4522,3 +4525,36 @@ libopenrazer.so.0 libopenrazer-0.2.0_1
 libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (28 preceding siblings ...)
  2024-08-03  8:00 ` EarldridgeJazzedPineda
@ 2024-08-04 23:51 ` EarldridgeJazzedPineda
  2024-08-05  3:36 ` EarldridgeJazzedPineda
                   ` (25 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-04 23:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2365 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 363518 bytes --]

From d9cb80c8cdbf19c600ff8a0e341c9611bba95c69 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 155 files changed, 6728 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 60e900856d2ade..8ffa92cf8936d9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4526,3 +4529,36 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (29 preceding siblings ...)
  2024-08-04 23:51 ` EarldridgeJazzedPineda
@ 2024-08-05  3:36 ` EarldridgeJazzedPineda
  2024-08-05  3:38 ` EarldridgeJazzedPineda
                   ` (24 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-05  3:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2365 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* The dash works, but no lenses are included. Lenses cannot be compiled due to a problem with the Vala compiler.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 363518 bytes --]

From 9c9258956ed23dcd37e2a85aea3ff0c91c7665e8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 155 files changed, 6728 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 60e900856d2ade..8ffa92cf8936d9 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4526,3 +4529,36 @@ libstaroffice-0.0.so.0 libstaroffice-0.0.7_1
 libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (30 preceding siblings ...)
  2024-08-05  3:36 ` EarldridgeJazzedPineda
@ 2024-08-05  3:38 ` EarldridgeJazzedPineda
  2024-08-05  4:25 ` EarldridgeJazzedPineda
                   ` (23 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-05  3:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2251 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 363497 bytes --]

From 62f157f96bab8be812ac53e4a6cf3568062e831c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 155 files changed, 6728 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (31 preceding siblings ...)
  2024-08-05  3:38 ` EarldridgeJazzedPineda
@ 2024-08-05  4:25 ` EarldridgeJazzedPineda
  2024-08-05  5:10 ` EarldridgeJazzedPineda
                   ` (22 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-05  4:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2251 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 373353 bytes --]

From 72157ba281ec43049e4aa1733aa04017ebad0e39 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 162 files changed, 6938 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..64a1ae6113fbfb
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (32 preceding siblings ...)
  2024-08-05  4:25 ` EarldridgeJazzedPineda
@ 2024-08-05  5:10 ` EarldridgeJazzedPineda
  2024-08-05 11:44 ` EarldridgeJazzedPineda
                   ` (21 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-05  5:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2251 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 374871 bytes --]

From 0ca63036268b4f2fe2c8e70cbb94dd6136b7582c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 163 files changed, 6972 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..64a1ae6113fbfb
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (33 preceding siblings ...)
  2024-08-05  5:10 ` EarldridgeJazzedPineda
@ 2024-08-05 11:44 ` EarldridgeJazzedPineda
  2024-08-05 12:21 ` EarldridgeJazzedPineda
                   ` (20 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-05 11:44 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2251 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 376471 bytes --]

From 1446dd443cd6cbea1c9c0ac7e806d4378f426c42 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 164 files changed, 7008 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (34 preceding siblings ...)
  2024-08-05 11:44 ` EarldridgeJazzedPineda
@ 2024-08-05 12:21 ` EarldridgeJazzedPineda
  2024-08-05 12:50 ` EarldridgeJazzedPineda
                   ` (19 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-05 12:21 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2251 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 380354 bytes --]

From 62759a96b7e06062f8d255b65c934e22865f5849 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 166 files changed, 7083 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (35 preceding siblings ...)
  2024-08-05 12:21 ` EarldridgeJazzedPineda
@ 2024-08-05 12:50 ` EarldridgeJazzedPineda
  2024-08-05 13:00 ` EarldridgeJazzedPineda
                   ` (18 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-05 12:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2251 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Unity Tweak Tool does not work.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 381700 bytes --]

From b2c9f63b6d195f1ae1185a12eff3bb762396d064 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  17 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 167 files changed, 7111 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..c2bb1e7889fb38
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,17 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=1
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance unity-session
+ unity-settings unity-settings-daemon unity-tweak-tool xf86-input-synaptics
+ xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (36 preceding siblings ...)
  2024-08-05 12:50 ` EarldridgeJazzedPineda
@ 2024-08-05 13:00 ` EarldridgeJazzedPineda
  2024-08-06  0:07 ` EarldridgeJazzedPineda
                   ` (17 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-05 13:00 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2216 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some, but not all of the indicators work.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 381833 bytes --]

From cfa485c8ec099c2adde3aaf0e8757b4f02611921 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 167 files changed, 7112 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (37 preceding siblings ...)
  2024-08-05 13:00 ` EarldridgeJazzedPineda
@ 2024-08-06  0:07 ` EarldridgeJazzedPineda
  2024-08-06  1:26 ` EarldridgeJazzedPineda
                   ` (16 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-06  0:07 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2242 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* The HUD works (by pressing Alt), but no search results will appear.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
##### Unity Control Center bugs
* Unity Control Center crashes when selecting Brightness & Lock (which uses an Ubuntu-specific GSettings schema).
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 384802 bytes --]

From 6969d6170afc3b74b996db5e371138a67e6c0e82 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  30 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 168 files changed, 7156 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..869ea17bfbcbde
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..903aa8fceab79f
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (38 preceding siblings ...)
  2024-08-06  0:07 ` EarldridgeJazzedPineda
@ 2024-08-06  1:26 ` EarldridgeJazzedPineda
  2024-08-06  3:20 ` EarldridgeJazzedPineda
                   ` (15 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-06  1:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2127 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* The HUD works (by pressing Alt), but no search results will appear.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 386070 bytes --]

From 0217d9cdab667f7e1cb4b5b1809662108160e5f9 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  27 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  65 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  32 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 srcpkgs/unity/patches/remove-systemd.patch    |  14 +
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/patches/use-runit.patch         |  25 +
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 170 files changed, 7170 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-systemd.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/patches/use-runit.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..e214276c416707
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..f5e5c466731e92
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,65 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ smbclient sound-theme-freedesktop system-config-printer webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..954d4093c4091f
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..c33b0a2abc09cb
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..e270b4a5dc9436
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..948b61017d346e
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,32 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-systemd.patch b/srcpkgs/unity/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..edd74a0aa460d5
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-systemd.patch
@@ -0,0 +1,14 @@
+diff -p1ru a/tools/compiz-profile-selector.in b/tools/compiz-profile-selector.in
+--- a/tools/compiz-profile-selector.in	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/compiz-profile-selector.in	2024-07-27 20:30:50.844438751 +0800
+@@ -35,10 +35,2 @@ export UNITY_DEFAULT_PROFILE="$settings_
+ 
+-if [ -n "$UPSTART_SESSION" ]; then
+-  initctl set-env -g COMPIZ_CONFIG_PROFILE=$COMPIZ_CONFIG_PROFILE
+-  initctl set-env -g UNITY_HAS_3D_SUPPORT=$UNITY_HAS_3D_SUPPORT
+-  initctl set-env -g UNITY_DEFAULT_PROFILE=$UNITY_DEFAULT_PROFILE
+-else
+-  update_env_args="--systemd"
+-fi
+-
+ dbus-update-activation-environment $update_env_args --verbose COMPIZ_CONFIG_PROFILE
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/patches/use-runit.patch b/srcpkgs/unity/patches/use-runit.patch
new file mode 100644
index 00000000000000..838478d4612a90
--- /dev/null
+++ b/srcpkgs/unity/patches/use-runit.patch
@@ -0,0 +1,25 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-07-27 06:22:49.318295509 +0800
+@@ -97,6 +97,3 @@ def call_silently(cmd):
+ def session_manager_command(service, what):
+-    if is_systemd_session() and not is_running_in_upstart(service):
+-        return "systemctl --user {} {}.service".format(what, service)
+-    elif is_upstart_session():
+-        return "{} {}".format(what, service)
++    return "sv {} {}".format(what, service)
+ 
+@@ -170,3 +167,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
+@@ -259,8 +256,2 @@ if __name__ == '__main__':
+                       help="Run unity /!\ This is for compatibility with other desktop interfaces and acts the same as running unity without --replace")
+-    if is_systemd_session() and not is_unity_running_in_upstart():
+-        parser.add_option("--ignore-systemd", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without systemd support")
+-    elif is_upstart_session():
+-        parser.add_option("--ignore-upstart", action="store_true", dest="ignore_session_manager",
+-                          help="Run unity without upstart support")
+     parser.add_option("--reset", action="store_true",
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (39 preceding siblings ...)
  2024-08-06  1:26 ` EarldridgeJazzedPineda
@ 2024-08-06  3:20 ` EarldridgeJazzedPineda
  2024-08-06 23:38 ` EarldridgeJazzedPineda
                   ` (14 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-06  3:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2056 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package.
 
At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* The date/time indicator depends on `org.freedesktop.timedate1`. I will need to port openrc-settingsd.
* Some indicators use IDOs (indicator display objects) and they do not render.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 385642 bytes --]

From 318eb8e3da785039307865d7160663775a5d73f7 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  32 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 171 files changed, 7166 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..954d4093c4091f
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..c33b0a2abc09cb
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..e270b4a5dc9436
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..948b61017d346e
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,32 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (40 preceding siblings ...)
  2024-08-06  3:20 ` EarldridgeJazzedPineda
@ 2024-08-06 23:38 ` EarldridgeJazzedPineda
  2024-08-08  4:38 ` EarldridgeJazzedPineda
                   ` (13 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-06 23:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2016 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some indicators use IDOs (indicator display objects) and they do not render.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 386407 bytes --]

From 975129ef430b5f2295ad97238882575a7a5307a2 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  33 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 172 files changed, 7173 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..8ede1aaa05cec5
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ef19141b592492
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,33 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (41 preceding siblings ...)
  2024-08-06 23:38 ` EarldridgeJazzedPineda
@ 2024-08-08  4:38 ` EarldridgeJazzedPineda
  2024-08-08  5:09 ` EarldridgeJazzedPineda
                   ` (12 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-08  4:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2163 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Indicators do not load at the Unity greeter.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.
* Nothing happens when Region & Language is clicked (because it can't open gnome-control-center).

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 388452 bytes --]

From 4c08311884af4a9f2764f939ca843b9cc053396c Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  33 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 173 files changed, 7194 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..8ede1aaa05cec5
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ef19141b592492
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,33 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (42 preceding siblings ...)
  2024-08-08  4:38 ` EarldridgeJazzedPineda
@ 2024-08-08  5:09 ` EarldridgeJazzedPineda
  2024-08-08  5:33 ` EarldridgeJazzedPineda
                   ` (11 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-08  5:09 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2163 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Indicators do not load at the Unity greeter.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.
* Nothing happens when Region & Language is clicked (because it can't open gnome-control-center).

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 390083 bytes --]

From 0236e9e7cc28a095e4fce8fced8796419fb3066d Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  33 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 174 files changed, 7214 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..726cf6d5ea3c4f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..3c7bbbf3b46f01
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..8ede1aaa05cec5
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ef19141b592492
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,33 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (43 preceding siblings ...)
  2024-08-08  5:09 ` EarldridgeJazzedPineda
@ 2024-08-08  5:33 ` EarldridgeJazzedPineda
  2024-08-09  4:57 ` EarldridgeJazzedPineda
                   ` (10 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-08  5:33 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2163 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Some indicators use IDOs (indicator display objects) and they do not render.
* Indicators do not load at the Unity greeter.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.
* Nothing happens when Region & Language is clicked (because it can't open gnome-control-center).

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 390143 bytes --]

From 98ce44ba557cd7d8bcfcd8e3979ea9912137f49e Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  33 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 174 files changed, 7214 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..8ede1aaa05cec5
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ef19141b592492
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,33 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (44 preceding siblings ...)
  2024-08-08  5:33 ` EarldridgeJazzedPineda
@ 2024-08-09  4:57 ` EarldridgeJazzedPineda
  2024-08-09  5:00 ` EarldridgeJazzedPineda
                   ` (9 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-09  4:57 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1984 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Indicators do not load at the Unity greeter.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 390143 bytes --]

From 52b4f1caf0bc644d93f44042a885d338bb0e4f06 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  33 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 174 files changed, 7214 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index 42ab7aadc791d9..57628c489ffb41 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4527,3 +4530,36 @@ libbox2d.so.2 box2d-2.4.1_1
 libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..8ede1aaa05cec5
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ef19141b592492
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,33 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (45 preceding siblings ...)
  2024-08-09  4:57 ` EarldridgeJazzedPineda
@ 2024-08-09  5:00 ` EarldridgeJazzedPineda
  2024-08-09 11:35 ` EarldridgeJazzedPineda
                   ` (8 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-09  5:00 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1984 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Indicators do not load at the Unity greeter.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 390150 bytes --]

From 459a09a31e4cbdc03152e6edeb36e7fc33d1c1b2 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  35 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  33 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 174 files changed, 7214 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..a935692f4b3673 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,36 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..f2e0ad2ff5ed6e
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..8ede1aaa05cec5
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ef19141b592492
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,33 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (46 preceding siblings ...)
  2024-08-09  5:00 ` EarldridgeJazzedPineda
@ 2024-08-09 11:35 ` EarldridgeJazzedPineda
  2024-08-10  5:14 ` EarldridgeJazzedPineda
                   ` (7 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-09 11:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2071 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

To open apps, click on the Terminal icon on the left panel and type in the name of the application.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Some menu bars are included with the application window, unless it is run with `GTK_MODULE=unity-gtk-module`.
* Indicators do not load at the Unity greeter.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. A workaround is to open Unity Control Center using sudo.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 390716 bytes --]

From 48de3966732a0e9efd4f3c0a55eadea1abf34100 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  33 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 175 files changed, 7218 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..a935692f4b3673 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,36 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..8ede1aaa05cec5
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..ef19141b592492
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,33 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (47 preceding siblings ...)
  2024-08-09 11:35 ` EarldridgeJazzedPineda
@ 2024-08-10  5:14 ` EarldridgeJazzedPineda
  2024-08-13  8:45 ` EarldridgeJazzedPineda
                   ` (6 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-10  5:14 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1891 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Indicators do not load at the Unity greeter.
##### Unity Control Center bugs
* Clicking the Unlock button does not work. (known problem with Unity for Arch, a workaround is to open Unity Control Center using sudo)

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 391528 bytes --]

From f2d2109e0f16dea24c703739c4d00935a1bd6857 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  18 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-lens-music/template             |  36 +
 .../patches/remove-goa-scopes.diff            |  45 +
 srcpkgs/unity-lens-photos/template            |  30 +
 srcpkgs/unity-lens-video/template             |  28 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 .../unity-polkit-authentication-agent.desktop |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  34 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 176 files changed, 7225 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-lens-music/template
 create mode 100644 srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
 create mode 100644 srcpkgs/unity-lens-photos/template
 create mode 100644 srcpkgs/unity-lens-video/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..a935692f4b3673 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,36 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ee90fe85bc9db2
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,18 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="bluez compiz-ubuntu gnome-settings-daemon gsettings-desktop-schemas
+ gsettings-ubuntu-schemas indicator-application indicator-appmenu
+ indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages
+ indicator-power indicator-printers indicator-session indicator-sound
+ libayatana-appindicator libayatana-indicator lightdm lightdm-unity-greeter
+ nemo nux unity unity-gtk-module unity-indicator-appearance
+ unity-lens-applications unity-lens-files unity-lens-music unity-lens-photos
+ unity-lens-video unity-scope-home unity-session unity-settings
+ unity-settings-daemon unity-tweak-tool xf86-input-synaptics xorg zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-music/template b/srcpkgs/unity-lens-music/template
new file mode 100644
index 00000000000000..3ffc6c30801b86
--- /dev/null
+++ b/srcpkgs/unity-lens-music/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-lens-music'
+pkgname=unity-lens-music
+version=6.9.1+16.04
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool json-glib
+ pkg-config vala wget"
+makedepends="gst-plugins-base1-devel gstreamer1-devel libgee-devel
+ libunity-devel tdb-devel"
+depends="libnotify liboauth libsoup"
+short_desc="Music, in the dash"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-music"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}.orig.tar.gz"
+checksum=fc6970c5f7ee9c8138175ce124f2e522c2deb56e1decfef092affbb7d45b6e37
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-music_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-music_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -i
+}
diff --git a/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
new file mode 100644
index 00000000000000..09394bc4e80203
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/patches/remove-goa-scopes.diff
@@ -0,0 +1,45 @@
+diff -Nur a/po/POTFILES.in b/po/POTFILES.in
+--- a/po/POTFILES.in	2017-06-05 18:35:51.000000000 +0200
++++ b/po/POTFILES.in	2022-06-13 02:32:35.622115937 +0200
+@@ -1,10 +1,3 @@
+ [encoding: UTF-8]
+-src/unity_facebook_daemon.py
+-src/unity_picasa_daemon.py
+ src/unity_shotwell_daemon.py
+-src/unity_flickr_daemon.py
+-[type: gettext/ini]data/flickr.scope.in
+-[type: gettext/ini]data/facebook.scope.in
+ [type: gettext/ini]data/shotwell.scope.in
+-[type: gettext/ini]data/picasa.scope.in
+-[type: gettext/xml]unity-lens-photos.application.in
+diff -Nur a/setup.cfg b/setup.cfg
+--- a/setup.cfg	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.cfg	2022-06-13 01:46:47.286337106 +0200
+@@ -3,9 +3,4 @@
+ 
+ [build_i18n]
+ domain=unity-lens-photos
+-desktop_files=[("share/unity/scopes/photos", ("data/facebook.scope.in",
+-                                              "data/flickr.scope.in",
+-                                              "data/picasa.scope.in",
+-                                              "data/shotwell.scope.in",))]
+-xml_files_no_trans=[("share/accounts/applications", ("unity-lens-photos.application.in",))]
+-
++desktop_files=[("share/unity/scopes/photos", ("data/shotwell.scope.in",))]
+diff -Nur a/setup.py b/setup.py
+--- a/setup.py	2017-06-05 18:35:51.000000000 +0200
++++ b/setup.py	2022-06-13 01:46:47.286337106 +0200
+@@ -12,13 +12,7 @@
+       license="GNU General Public License (GPL)",
+       data_files=[
+     ('share/unity-scopes/shotwell', ['src/unity_shotwell_daemon.py']),
+-    ('share/unity-scopes/flickr', ['src/unity_flickr_daemon.py']),
+-    ('share/unity-scopes/facebook', ['src/unity_facebook_daemon.py']),
+-    ('share/unity-scopes/picasa', ['src/unity_picasa_daemon.py']),
+     ('share/dbus-1/services', ['data/unity-scope-shotwell.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-flickr.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-facebook.service']),
+-    ('share/dbus-1/services', ['data/unity-scope-picasa.service']),
+     ('share/applications', ['unity-lens-photos.desktop']),
+     ('share/pixmaps', ['unity-lens-photos.png']),
+     ], cmdclass={"build":  build_extra.build_extra,
diff --git a/srcpkgs/unity-lens-photos/template b/srcpkgs/unity-lens-photos/template
new file mode 100644
index 00000000000000..745b3a4c626d65
--- /dev/null
+++ b/srcpkgs/unity-lens-photos/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-lens-photos'
+pkgname=unity-lens-photos
+version=1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="intltool python3 python3-distutils-extra"
+makedepends=""
+depends="dee libsoup libunity python3-gobject python3-httplib2
+ python3-oauthlib"
+short_desc="Unity lens for browsing photos"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-photos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-photos_${version}.orig.tar.gz"
+checksum=ef1f05288c643b6e98d4b4d7b8fcadfd043ed13ae525584c96c65ceb9ea629b7
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/unity-lens-video/template b/srcpkgs/unity-lens-video/template
new file mode 100644
index 00000000000000..c28733d99f4b96
--- /dev/null
+++ b/srcpkgs/unity-lens-video/template
@@ -0,0 +1,28 @@
+# Template file for 'unity-lens-video'
+pkgname=unity-lens-video
+version=0.3.15+16.04.20160212.1
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --enable-headless-tests"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="dee-devel json-glib-devel libgee-devel libsoup-gnome-devel
+ libunity-devel libzeitgeist-devel unity-lens-music"
+depends="unity-lens-music"
+short_desc="Unity Video lens"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-videos"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-video_${version}.orig.tar.gz"
+checksum=51a9bceb02587051e374f0914c6ca505c12e04bf3bf978ea4319a391e76fd867
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
new file mode 100644
index 00000000000000..bf82892b8ef2c0
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity PolicyKit Authentication Agent
+NoDisplay=true
+TryExec=/usr/libexec/polkit-gnome-authentication-agent-1
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..32eb1348d67c9f
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-polkit-authentication-agent;unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..8da15186db1e5a
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus polkit-gnome unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-polkit-authentication-agent.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (48 preceding siblings ...)
  2024-08-10  5:14 ` EarldridgeJazzedPineda
@ 2024-08-13  8:45 ` EarldridgeJazzedPineda
  2024-08-13  8:49 ` EarldridgeJazzedPineda
                   ` (5 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-13  8:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1720 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Indicators do not load at the Unity greeter.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 384423 bytes --]

From 6961ee9b1370aac2490bc908b86a833afa4913a8 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  15 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 .../unity-polkit-authentication-agent.desktop |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  34 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 172 files changed, 7083 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..a935692f4b3673 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,36 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ae1b7fd7791a8a
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="indicator-application indicator-appmenu indicator-bluetooth
+ indicator-datetime indicator-keyboard indicator-power indicator-printers
+ indicator-session indicator-sound lightdm-unity-greeter nemo unity
+ unity-gtk-module unity-indicator-appearance unity-lens-applications
+ unity-lens-files unity-scope-home unity-session unity-settings
+ unity-settings-daemon"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
new file mode 100644
index 00000000000000..bf82892b8ef2c0
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity PolicyKit Authentication Agent
+NoDisplay=true
+TryExec=/usr/libexec/polkit-gnome-authentication-agent-1
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..32eb1348d67c9f
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-polkit-authentication-agent;unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..8da15186db1e5a
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus polkit-gnome unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-polkit-authentication-agent.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (49 preceding siblings ...)
  2024-08-13  8:45 ` EarldridgeJazzedPineda
@ 2024-08-13  8:49 ` EarldridgeJazzedPineda
  2024-08-13 10:08 ` EarldridgeJazzedPineda
                   ` (4 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-13  8:49 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1720 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Indicators do not load at the Unity greeter.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 380727 bytes --]

From 65e52e51938c31a00734b180cc2fd8b56ccd6b5f Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  35 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  15 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 .../unity-polkit-authentication-agent.desktop |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  34 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 169 files changed, 6997 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..25fab7862a138a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,35 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..ae1b7fd7791a8a
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="indicator-application indicator-appmenu indicator-bluetooth
+ indicator-datetime indicator-keyboard indicator-power indicator-printers
+ indicator-session indicator-sound lightdm-unity-greeter nemo unity
+ unity-gtk-module unity-indicator-appearance unity-lens-applications
+ unity-lens-files unity-scope-home unity-session unity-settings
+ unity-settings-daemon"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
new file mode 100644
index 00000000000000..bf82892b8ef2c0
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity PolicyKit Authentication Agent
+NoDisplay=true
+TryExec=/usr/libexec/polkit-gnome-authentication-agent-1
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..32eb1348d67c9f
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-polkit-authentication-agent;unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..8da15186db1e5a
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus polkit-gnome unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-polkit-authentication-agent.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (50 preceding siblings ...)
  2024-08-13  8:49 ` EarldridgeJazzedPineda
@ 2024-08-13 10:08 ` EarldridgeJazzedPineda
  2024-08-13 10:15 ` EarldridgeJazzedPineda
                   ` (3 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-13 10:08 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1720 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Indicators do not load at the Unity greeter.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 382022 bytes --]

From 1eabe25b173c4608f01dbf11ac1b46d81fdeb9fa Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  35 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/session-shortcuts/template            |  28 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  15 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 .../unity-polkit-authentication-agent.desktop |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  34 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 170 files changed, 7025 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 100644 srcpkgs/session-shortcuts/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..25fab7862a138a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,35 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/session-shortcuts/template b/srcpkgs/session-shortcuts/template
new file mode 100644
index 00000000000000..b2e7d77b07cdec
--- /dev/null
+++ b/srcpkgs/session-shortcuts/template
@@ -0,0 +1,28 @@
+# Template file for 'session-shortcuts'
+pkgname=session-shortcuts
+version=1.4
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="gettext intltool"
+short_desc="Several .desktop files that allow you to shutdown, logout, and reboot"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://launchpad.net/session-shortcuts"
+changelog="https://git.launchpad.net/ubuntu/+source/session-shortcuts/plain/debian/changelog"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/session-shortcuts/${version}/session-shortcuts_${version}.tar.xz"
+checksum=5eba57bd704b24928b6dadfc524ceb4c4d53b2c8b6a92076dfa8a4a7d1c93bf0
+
+do_build() {
+	./build.sh
+}
+
+do_install() {
+	vmkdir usr/share/applications
+	vcopy "build/*" usr/share/applications
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..a6a65e01f9ddaa
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="indicator-application indicator-appmenu indicator-bluetooth
+ indicator-datetime indicator-keyboard indicator-power indicator-printers
+ indicator-session indicator-sound lightdm-unity-greeter nemo unity
+ unity-gtk-module unity-indicator-appearance unity-lens-applications
+ unity-lens-files unity-scope-home unity-session unity-settings
+ unity-settings-daemon zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
new file mode 100644
index 00000000000000..bf82892b8ef2c0
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity PolicyKit Authentication Agent
+NoDisplay=true
+TryExec=/usr/libexec/polkit-gnome-authentication-agent-1
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..32eb1348d67c9f
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-polkit-authentication-agent;unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..8da15186db1e5a
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus polkit-gnome unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-polkit-authentication-agent.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (51 preceding siblings ...)
  2024-08-13 10:08 ` EarldridgeJazzedPineda
@ 2024-08-13 10:15 ` EarldridgeJazzedPineda
  2024-08-13 10:22 ` EarldridgeJazzedPineda
                   ` (2 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-13 10:15 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1720 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Indicators do not load at the Unity greeter.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 382022 bytes --]

From 7bfd98bf5b4a226492e1290c2b75a238490bd9d3 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  35 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/session-shortcuts/template            |  28 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  15 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 .../unity-polkit-authentication-agent.desktop |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  34 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 170 files changed, 7025 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 100644 srcpkgs/session-shortcuts/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..25fab7862a138a 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,35 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/session-shortcuts/template b/srcpkgs/session-shortcuts/template
new file mode 100644
index 00000000000000..b2e7d77b07cdec
--- /dev/null
+++ b/srcpkgs/session-shortcuts/template
@@ -0,0 +1,28 @@
+# Template file for 'session-shortcuts'
+pkgname=session-shortcuts
+version=1.4
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="gettext intltool"
+short_desc="Several .desktop files that allow you to shutdown, logout, and reboot"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://launchpad.net/session-shortcuts"
+changelog="https://git.launchpad.net/ubuntu/+source/session-shortcuts/plain/debian/changelog"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/session-shortcuts/${version}/session-shortcuts_${version}.tar.xz"
+checksum=5eba57bd704b24928b6dadfc524ceb4c4d53b2c8b6a92076dfa8a4a7d1c93bf0
+
+do_build() {
+	./build.sh
+}
+
+do_install() {
+	vmkdir usr/share/applications
+	vcopy "build/*" usr/share/applications
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..a6a65e01f9ddaa
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="indicator-application indicator-appmenu indicator-bluetooth
+ indicator-datetime indicator-keyboard indicator-power indicator-printers
+ indicator-session indicator-sound lightdm-unity-greeter nemo unity
+ unity-gtk-module unity-indicator-appearance unity-lens-applications
+ unity-lens-files unity-scope-home unity-session unity-settings
+ unity-settings-daemon zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
new file mode 100644
index 00000000000000..bf82892b8ef2c0
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity PolicyKit Authentication Agent
+NoDisplay=true
+TryExec=/usr/libexec/polkit-gnome-authentication-agent-1
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..32eb1348d67c9f
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-polkit-authentication-agent;unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..8da15186db1e5a
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus polkit-gnome unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-polkit-authentication-agent.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (52 preceding siblings ...)
  2024-08-13 10:15 ` EarldridgeJazzedPineda
@ 2024-08-13 10:22 ` EarldridgeJazzedPineda
  2024-08-15  1:33 ` EarldridgeJazzedPineda
  2024-09-02  2:29 ` EarldridgeJazzedPineda
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-13 10:22 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1720 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Indicators do not load at the Unity greeter.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 385718 bytes --]

From d1ca18ed762f17f221d5f1f17ff68c8a87de0a76 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/session-shortcuts/template            |  28 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  15 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 .../unity-polkit-authentication-agent.desktop |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  34 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  69 ++
 srcpkgs/yaru/template                         |   4 +-
 173 files changed, 7111 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 100644 srcpkgs/session-shortcuts/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..a935692f4b3673 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,36 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/session-shortcuts/template b/srcpkgs/session-shortcuts/template
new file mode 100644
index 00000000000000..b2e7d77b07cdec
--- /dev/null
+++ b/srcpkgs/session-shortcuts/template
@@ -0,0 +1,28 @@
+# Template file for 'session-shortcuts'
+pkgname=session-shortcuts
+version=1.4
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="gettext intltool"
+short_desc="Several .desktop files that allow you to shutdown, logout, and reboot"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://launchpad.net/session-shortcuts"
+changelog="https://git.launchpad.net/ubuntu/+source/session-shortcuts/plain/debian/changelog"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/session-shortcuts/${version}/session-shortcuts_${version}.tar.xz"
+checksum=5eba57bd704b24928b6dadfc524ceb4c4d53b2c8b6a92076dfa8a4a7d1c93bf0
+
+do_build() {
+	./build.sh
+}
+
+do_install() {
+	vmkdir usr/share/applications
+	vcopy "build/*" usr/share/applications
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..a6a65e01f9ddaa
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="indicator-application indicator-appmenu indicator-bluetooth
+ indicator-datetime indicator-keyboard indicator-power indicator-printers
+ indicator-session indicator-sound lightdm-unity-greeter nemo unity
+ unity-gtk-module unity-indicator-appearance unity-lens-applications
+ unity-lens-files unity-scope-home unity-session unity-settings
+ unity-settings-daemon zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
new file mode 100644
index 00000000000000..bf82892b8ef2c0
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity PolicyKit Authentication Agent
+NoDisplay=true
+TryExec=/usr/libexec/polkit-gnome-authentication-agent-1
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..32eb1348d67c9f
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-polkit-authentication-agent;unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..8da15186db1e5a
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus polkit-gnome unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-polkit-authentication-agent.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8746a0518096e0
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,69 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=FALSE \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PR PATCH] [Updated] New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (53 preceding siblings ...)
  2024-08-13 10:22 ` EarldridgeJazzedPineda
@ 2024-08-15  1:33 ` EarldridgeJazzedPineda
  2024-09-02  2:29 ` EarldridgeJazzedPineda
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-08-15  1:33 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1720 bytes --]

There is an updated pull request by EarldridgeJazzedPineda against master on the void-packages repository

https://github.com/EarldridgeJazzedPineda/void-packages unity
https://github.com/void-linux/void-packages/pull/51509

New packages for the Unity desktop environment
I will the changing some of the packages in the future, but this should do for now.

#### Testing the changes
- I tested the changes in this PR: **YES**

#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**

#### Local build testing
- I built this PR locally for my native architecture, x86_64-glibc

#### How to test Unity
To test the Unity desktop environment, build and install the `unity-core` package
 
Enable the `dbus`, `lightdm`, and `openrc-settingsd` services.

At the login screen, click on the circle next to the username and select "Unity (Default)", then login as usual.

#### Services
Here is a list of runit services that I wrote:
* indicator-datetime
* indicator-power
* indicator-session
* indicator-sound
* hud
* unity7
* unity-gtk-module
* unity-panel-service
* unity-panel-service-lockscreen
* unity-settings-daemon
* window-stack-bridge

I later learned that runit is not suitable for these kinds of programs. I will be using gnome-session to make it init-agnostic (inspired by [another attempt to port Unity to a non-systemd distribution](https://forum.porteus.org/viewtopic.php?t=11233)).

#### Known issues
* Indicators do not load at the Unity greeter.

Closes #43579.

A patch file from https://github.com/void-linux/void-packages/pull/51509.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-unity-51509.patch --]
[-- Type: text/x-diff, Size: 385873 bytes --]

From 4e53c391e9c37a92b0aa9cf0f26460f43e468b20 Mon Sep 17 00:00:00 2001
From: Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>
Date: Thu, 1 Aug 2024 19:59:27 +0800
Subject: [PATCH] New packages for the Unity desktop environment

---
 common/shlibs                                 |  36 +
 srcpkgs/cmake-extras/template                 |  13 +
 srcpkgs/compiz-ubuntu-devel                   |   1 +
 .../0001-Fix-cmake-install-directory.patch    |  34 +
 .../patches/0004-Disable-Werror.patch         |  25 +
 srcpkgs/compiz-ubuntu/template                |  68 ++
 .../patches/remove-systemd.patch              |  12 +
 srcpkgs/dbus-activation-env/template          |  16 +
 srcpkgs/dee-devel                             |   1 +
 srcpkgs/dee-qt-devel                          |   1 +
 srcpkgs/dee-qt/template                       |  25 +
 ...-deprecated-g_type_class_add_private.patch | 927 ++++++++++++++++++
 .../dee-1.2.7-fix-duplicates-vala-0.5X.patch  |  24 +
 .../dee/patches/vapi-skip-properties.patch    |  15 +
 srcpkgs/dee/template                          |  38 +
 srcpkgs/glewmx-devel                          |   1 +
 srcpkgs/glewmx/template                       |  67 ++
 srcpkgs/gsettings-qt-devel                    |   1 +
 srcpkgs/gsettings-qt/template                 |  30 +
 srcpkgs/gsettings-ubuntu-schemas-devel        |   1 +
 .../files/50-com.ubuntu.AccountsService.rules |  29 +
 srcpkgs/gsettings-ubuntu-schemas/template     |  34 +
 srcpkgs/hud-devel                             |   1 +
 srcpkgs/hud/files/hud/run                     |   2 +
 srcpkgs/hud/files/window-stack-bridge/run     |   2 +
 srcpkgs/hud/patches/0001-Use-Python-2.patch   |  58 ++
 .../0002-Remove-test-dependencies.patch       |  29 +
 .../hud/patches/fix-systemd-user-dir.patch    |   8 +
 srcpkgs/hud/template                          |  56 ++
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  61 ++
 srcpkgs/indicator-application/template        |  20 +
 .../patches/0001_autoconf.patch               |  12 +
 .../patches/use-ayatana-libraries.patch       |  46 +
 srcpkgs/indicator-appmenu/template            |  24 +
 .../patches/remove-urldispatch.patch          |  25 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-bluetooth/template          |  37 +
 .../files/indicator-datetime/run              |   2 +
 .../patches/disable-tests.patch               |  16 +
 .../patches/use-ayatana-ido-type.patch        |  20 +
 .../patches/use-ayatana-indicator-type.patch  |  20 +
 srcpkgs/indicator-datetime/template           |  28 +
 ...-depending-on-accountsservices-patch.patch |  68 ++
 ...le-DBus-method-activate_input_source.patch | 176 ++++
 ...ilable-DBus-method-xkeyboard-layouts.patch |  51 +
 .../0005-Spawn-ibus-daemon-at-startup.patch   |  31 +
 srcpkgs/indicator-keyboard/template           |  27 +
 srcpkgs/indicator-messages-devel              |   1 +
 .../patches/0001-autoconf-fix.patch           |  25 +
 .../patches/0002-Disable-tests.patch          |  25 +
 srcpkgs/indicator-messages/template           |  35 +
 .../indicator-power/files/indicator-power/run |   2 +
 .../patches/0001-Not-a-phone.patch            | 198 ++++
 .../patches/disable-tests.patch               |   8 +
 .../patches/use-ayatana-indicator-type.patch  |  10 +
 srcpkgs/indicator-power/template              |  26 +
 .../patches/use-ayatana-libraries.patch       |  45 +
 srcpkgs/indicator-printers/template           |  37 +
 .../files/indicator-session/run               |   2 +
 .../patches/0001-There-is-no-help.patch       |  80 ++
 .../0003-Remove-libwhoopsie-dependency.patch  |  49 +
 .../patches/include-cstdint.patch             |   7 +
 .../patches/use-ayatana-indicator-type.patch  |   8 +
 srcpkgs/indicator-session/template            |  26 +
 .../indicator-sound/files/indicator-sound/run |   2 +
 .../patches/use-ayatana-ido-type.patch        |  21 +
 .../patches/use-ayatana-indicator-type.patch  | 232 +++++
 srcpkgs/indicator-sound/template              |  42 +
 srcpkgs/libcolumbus-devel                     |   1 +
 srcpkgs/libcolumbus/template                  |  26 +
 srcpkgs/libgeonames-devel                     |   1 +
 srcpkgs/libgeonames/template                  |  24 +
 srcpkgs/libunity-devel                        |   1 +
 srcpkgs/libunity-misc-devel                   |   1 +
 .../patches/0001_autotools.patch              |  11 +
 srcpkgs/libunity-misc/template                |  31 +
 srcpkgs/libunity/patches/0001_autoconf.patch  |  20 +
 .../patches/libunity-ubuntu-patches.patch     | 153 +++
 srcpkgs/libunity/template                     |  47 +
 .../files/10-unity.defaults                   |  31 +
 .../files/50-unity-greeter.rules              |  98 ++
 srcpkgs/lightdm-unity-greeter/files/logo.png  | Bin 0 -> 3264 bytes
 .../files/unity-greeter-indicators-start      |  11 +
 .../patches/use-ayatana-libraries.patch       | 114 +++
 .../patches/use-runit.patch                   |   9 +
 srcpkgs/lightdm-unity-greeter/template        |  47 +
 srcpkgs/nux-devel                             |   1 +
 srcpkgs/nux/files/50_check_unity_support      |   6 +
 srcpkgs/nux/patches/0001_autoconf.patch       |  12 +
 .../add_setupframebufferobject_clear.patch    |  13 +
 srcpkgs/nux/patches/use_glewmx.patch          |  35 +
 srcpkgs/nux/template                          |  59 ++
 .../files/openrc-settingsd/run                |   6 +
 srcpkgs/openrc-settingsd/template             |  19 +
 srcpkgs/properties-cpp/template               |  17 +
 srcpkgs/session-shortcuts/template            |  28 +
 srcpkgs/unity-api-devel                       |   1 +
 srcpkgs/unity-api/template                    |  36 +
 .../files/voidlinux-icon-tango-22.png         | Bin 0 -> 621 bytes
 .../files/voidlinux-icon-tango-24.png         | Bin 0 -> 626 bytes
 srcpkgs/unity-asset-pool/template             |  30 +
 srcpkgs/unity-backgrounds/template            |  15 +
 srcpkgs/unity-control-center-devel            |   1 +
 .../files/system-config-printer-unity.desktop | 108 ++
 .../files/unity-online-accounts-panel.desktop | 197 ++++
 .../files/unity-region-panel.desktop          | 206 ++++
 ...-54_enable_alt_tap_in_shortcut.patch.patch |  71 ++
 .../patches/0002-Skip-region-panel.patch      |  24 +
 ...Remove-Ubuntu-specific-language-code.patch | 311 ++++++
 ...ntrol-center-to-run-at-the-same-time.patch |  25 +
 ...e-overlay-scrollbar-from-GTK_MODULES.patch |  49 +
 ...nome-bluetooth-to-libunity-bluetooth.patch |  67 ++
 ...images-usr-share-pixmaps-faces-unity.patch |  37 +
 .../patches/remove-gnome-common.patch         |   9 +
 .../patches/remove-ubuntu-specific.patch      |  44 +
 srcpkgs/unity-control-center/template         |  66 ++
 srcpkgs/unity-core/template                   |  15 +
 srcpkgs/unity-devel                           |   1 +
 srcpkgs/unity-gtk-module-devel                |   1 +
 .../unity-gtk-module/files/90unity-gtk-module |   2 +
 .../files/unity-gtk-module/finish             |   3 +
 .../files/unity-gtk-module/run                |   3 +
 srcpkgs/unity-gtk-module/template             |  37 +
 .../patches/use-ayatana-libraries.patch       |  18 +
 srcpkgs/unity-indicator-appearance/template   |  15 +
 srcpkgs/unity-lens-applications/template      |  42 +
 srcpkgs/unity-lens-files/template             |  34 +
 srcpkgs/unity-scope-home/INSTALL              |   6 +
 srcpkgs/unity-scope-home/REMOVE               |   6 +
 ...untu.com-only-accepts-locale-string-.patch |  44 +
 .../0003-Show-description-of-error-code.patch |  29 +
 .../patches/fix-vala-0.56-errors.patch        |  48 +
 srcpkgs/unity-scope-home/template             |  35 +
 .../unity-session/files/hud-service.desktop   |   6 +
 .../files/indicator-bluetooth.desktop         |   6 +
 .../files/indicator-datetime.desktop          |   6 +
 .../files/indicator-power.desktop             |   6 +
 .../files/indicator-printers.desktop          |   6 +
 .../files/indicator-session.desktop           |   6 +
 .../files/indicator-sound.desktop             |   6 +
 .../files/unity-indicator-appearance.desktop  |   6 +
 .../unity-panel-service-lockscreen.desktop    |   6 +
 .../files/unity-panel-service.desktop         |   6 +
 .../unity-polkit-authentication-agent.desktop |   6 +
 srcpkgs/unity-session/files/unity.desktop     |   6 +
 .../files/window-stack-bridge.desktop         |   6 +
 .../patches/use-gnome-session.patch           |  16 +
 srcpkgs/unity-session/template                |  34 +
 srcpkgs/unity-settings-daemon-devel           |   1 +
 .../files/unity-settings-daemon/run           |   2 +
 ...01-Remove-accountsservice-dependency.patch | 130 +++
 ...t-screensaver-proxy-fails-to-compile.patch |  25 +
 srcpkgs/unity-settings-daemon/template        |  61 ++
 .../files/10_ubuntu-settings.gschema.override | 223 +++++
 .../files/20_ubuntu-unity.gschema.override    |  35 +
 srcpkgs/unity-settings/template               |  20 +
 srcpkgs/unity-tweak-tool/template             |  27 +
 srcpkgs/unity/files/launcher_bfb.png          | Bin 0 -> 7378 bytes
 .../files/unity-panel-service-lockscreen/run  |   2 +
 srcpkgs/unity/files/unity-panel-service/run   |   2 +
 srcpkgs/unity/files/unity.pam                 |   1 +
 srcpkgs/unity/files/unity7/run                |   3 +
 .../patches/0004-Remove-social.scope.patch    |  25 +
 .../0005-Remove-xpathselect-dependency.patch  | 563 +++++++++++
 srcpkgs/unity/patches/filemanager.patch       |  11 +
 .../unity/patches/fix-systemd-user-dir.patch  |   8 +
 .../patches/fix-unity-python-script.patch     |   8 +
 srcpkgs/unity/patches/remove-niceties.patch   |  58 ++
 .../patches/remove-ubuntu-specific.patch      |  37 +
 .../unity/patches/use-ayatana-libraries.patch |  90 ++
 srcpkgs/unity/template                        |  74 ++
 srcpkgs/yaru/template                         |   4 +-
 173 files changed, 7116 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/cmake-extras/template
 create mode 120000 srcpkgs/compiz-ubuntu-devel
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
 create mode 100644 srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
 create mode 100644 srcpkgs/compiz-ubuntu/template
 create mode 100644 srcpkgs/dbus-activation-env/patches/remove-systemd.patch
 create mode 100644 srcpkgs/dbus-activation-env/template
 create mode 120000 srcpkgs/dee-devel
 create mode 120000 srcpkgs/dee-qt-devel
 create mode 100644 srcpkgs/dee-qt/template
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
 create mode 100644 srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
 create mode 100644 srcpkgs/dee/patches/vapi-skip-properties.patch
 create mode 100644 srcpkgs/dee/template
 create mode 120000 srcpkgs/glewmx-devel
 create mode 100644 srcpkgs/glewmx/template
 create mode 120000 srcpkgs/gsettings-qt-devel
 create mode 100644 srcpkgs/gsettings-qt/template
 create mode 120000 srcpkgs/gsettings-ubuntu-schemas-devel
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
 create mode 100644 srcpkgs/gsettings-ubuntu-schemas/template
 create mode 120000 srcpkgs/hud-devel
 create mode 100644 srcpkgs/hud/files/hud/run
 create mode 100644 srcpkgs/hud/files/window-stack-bridge/run
 create mode 100644 srcpkgs/hud/patches/0001-Use-Python-2.patch
 create mode 100644 srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
 create mode 100644 srcpkgs/hud/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/hud/template
 create mode 100644 srcpkgs/indicator-application/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-application/template
 create mode 100644 srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-appmenu/template
 create mode 100644 srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
 create mode 100644 srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-bluetooth/template
 create mode 100644 srcpkgs/indicator-datetime/files/indicator-datetime/run
 create mode 100644 srcpkgs/indicator-datetime/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-datetime/template
 create mode 100644 srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
 create mode 100644 srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
 create mode 100644 srcpkgs/indicator-keyboard/template
 create mode 120000 srcpkgs/indicator-messages-devel
 create mode 100644 srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
 create mode 100644 srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
 create mode 100644 srcpkgs/indicator-messages/template
 create mode 100644 srcpkgs/indicator-power/files/indicator-power/run
 create mode 100644 srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
 create mode 100644 srcpkgs/indicator-power/patches/disable-tests.patch
 create mode 100644 srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-power/template
 create mode 100644 srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/indicator-printers/template
 create mode 100644 srcpkgs/indicator-session/files/indicator-session/run
 create mode 100644 srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
 create mode 100644 srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
 create mode 100644 srcpkgs/indicator-session/patches/include-cstdint.patch
 create mode 100644 srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-session/template
 create mode 100644 srcpkgs/indicator-sound/files/indicator-sound/run
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
 create mode 100644 srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
 create mode 100644 srcpkgs/indicator-sound/template
 create mode 120000 srcpkgs/libcolumbus-devel
 create mode 100644 srcpkgs/libcolumbus/template
 create mode 120000 srcpkgs/libgeonames-devel
 create mode 100644 srcpkgs/libgeonames/template
 create mode 120000 srcpkgs/libunity-devel
 create mode 120000 srcpkgs/libunity-misc-devel
 create mode 100644 srcpkgs/libunity-misc/patches/0001_autotools.patch
 create mode 100644 srcpkgs/libunity-misc/template
 create mode 100644 srcpkgs/libunity/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
 create mode 100644 srcpkgs/libunity/template
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
 create mode 100644 srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/logo.png
 create mode 100755 srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
 create mode 100644 srcpkgs/lightdm-unity-greeter/template
 create mode 120000 srcpkgs/nux-devel
 create mode 100644 srcpkgs/nux/files/50_check_unity_support
 create mode 100644 srcpkgs/nux/patches/0001_autoconf.patch
 create mode 100644 srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
 create mode 100644 srcpkgs/nux/patches/use_glewmx.patch
 create mode 100644 srcpkgs/nux/template
 create mode 100644 srcpkgs/openrc-settingsd/files/openrc-settingsd/run
 create mode 100644 srcpkgs/openrc-settingsd/template
 create mode 100644 srcpkgs/properties-cpp/template
 create mode 100644 srcpkgs/session-shortcuts/template
 create mode 120000 srcpkgs/unity-api-devel
 create mode 100644 srcpkgs/unity-api/template
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
 create mode 100755 srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
 create mode 100644 srcpkgs/unity-asset-pool/template
 create mode 100644 srcpkgs/unity-backgrounds/template
 create mode 120000 srcpkgs/unity-control-center-devel
 create mode 100644 srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/files/unity-region-panel.desktop
 create mode 100644 srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
 create mode 100644 srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-gnome-common.patch
 create mode 100644 srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity-control-center/template
 create mode 100644 srcpkgs/unity-core/template
 create mode 120000 srcpkgs/unity-devel
 create mode 120000 srcpkgs/unity-gtk-module-devel
 create mode 100644 srcpkgs/unity-gtk-module/files/90unity-gtk-module
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
 create mode 100644 srcpkgs/unity-gtk-module/files/unity-gtk-module/run
 create mode 100644 srcpkgs/unity-gtk-module/template
 create mode 100644 srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity-indicator-appearance/template
 create mode 100644 srcpkgs/unity-lens-applications/template
 create mode 100644 srcpkgs/unity-lens-files/template
 create mode 100644 srcpkgs/unity-scope-home/INSTALL
 create mode 100644 srcpkgs/unity-scope-home/REMOVE
 create mode 100644 srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
 create mode 100644 srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
 create mode 100644 srcpkgs/unity-scope-home/template
 create mode 100644 srcpkgs/unity-session/files/hud-service.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-bluetooth.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-datetime.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-power.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-printers.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-session.desktop
 create mode 100644 srcpkgs/unity-session/files/indicator-sound.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-indicator-appearance.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-panel-service.desktop
 create mode 100644 srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
 create mode 100644 srcpkgs/unity-session/files/unity.desktop
 create mode 100644 srcpkgs/unity-session/files/window-stack-bridge.desktop
 create mode 100644 srcpkgs/unity-session/patches/use-gnome-session.patch
 create mode 100644 srcpkgs/unity-session/template
 create mode 120000 srcpkgs/unity-settings-daemon-devel
 create mode 100644 srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
 create mode 100644 srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
 create mode 100644 srcpkgs/unity-settings-daemon/template
 create mode 100644 srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
 create mode 100644 srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
 create mode 100644 srcpkgs/unity-settings/template
 create mode 100644 srcpkgs/unity-tweak-tool/template
 create mode 100755 srcpkgs/unity/files/launcher_bfb.png
 create mode 100644 srcpkgs/unity/files/unity-panel-service-lockscreen/run
 create mode 100644 srcpkgs/unity/files/unity-panel-service/run
 create mode 100644 srcpkgs/unity/files/unity.pam
 create mode 100644 srcpkgs/unity/files/unity7/run
 create mode 100644 srcpkgs/unity/patches/0004-Remove-social.scope.patch
 create mode 100644 srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
 create mode 100644 srcpkgs/unity/patches/filemanager.patch
 create mode 100644 srcpkgs/unity/patches/fix-systemd-user-dir.patch
 create mode 100644 srcpkgs/unity/patches/fix-unity-python-script.patch
 create mode 100644 srcpkgs/unity/patches/remove-niceties.patch
 create mode 100644 srcpkgs/unity/patches/remove-ubuntu-specific.patch
 create mode 100644 srcpkgs/unity/patches/use-ayatana-libraries.patch
 create mode 100644 srcpkgs/unity/template

diff --git a/common/shlibs b/common/shlibs
index ac43ed84680c00..a935692f4b3673 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -3039,6 +3039,9 @@ libuim.so.8 uim-1.8.6_1
 libuim-scm.so.0 uim-1.8.6_1
 libuim-custom.so.2 uim-1.8.6_1
 libgcroots.so.0 libgcroots-0.3.2_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
 libdecoration.so.0 compiz-core-0.8.14_1
 libcompizconfig.so.0 libcompizconfig-0.8.14_1
 libemeraldengine.so.0 emerald-0.8.14_1
@@ -4528,3 +4531,36 @@ libhwy.so.1 highway-1.2.0_1
 libscenefx.so.1 scenefx-0.1_1
 libnng.so.1 nng-1.5.2_1
 libsentry.so sentry-native-0.7.7_1
+libunity-gtk3-parser.so.0 unity-gtk-module-0.0.0+18.04.20171202_1
+libdee-1.0.so.4 dee-1.2.7+17.10.20170616_1
+libunity.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-extras.so.9 libunity-7.1.4+19.04.20190319_1
+libunity-protocol-private.so.0 libunity-7.1.4+19.04.20190319_1
+libunity-misc.so.4 libunity-misc-4.0.5+14.04.20140115_1
+libmessaging-menu.so.0 indicator-messages-13.10.1+18.10.20180918_1
+libunity-settings-daemon.so.1 unity-settings-daemon-15.04.1+21.10.20220802_1
+libgeonames.so.0 libgeonames-0.3.1_1
+libunity-bluetooth.so.0 unity-control-center-15.04.0+23.04.20230220_1
+libunity-control-center.so.1 unity-control-center-15.04.0+23.04.20230220_1
+libunity-api.so.0 unity-api-8.7+17.04.20170404_1
+libgsettings-qt.so.1 gsettings-qt-0.2_1
+libdee-qt5.so.3 dee-qt-3.3+14.04.20140317_1
+libcolumbus.so.1 libcolumbus-1.1.0+15.10.20150806_1
+libhud-client.so.2 hud-14.10+17.10.20170619_1
+libhud.so.2 hud-14.10+17.10.20170619_1
+libhud-gtk.so.1 hud-14.10+17.10.20170619_1
+libGLEW.so.1.13 glewmx-1.13.0_1
+libGLEWmx.so.1.13 glewmx-1.13.0_1
+libnux-graphics-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libnux-core-4.0.so.0 nux-4.0.8+18.10.20180623_1
+libmetacity.so.3 metacity-3.52.0_1
+libcompizconfig.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompizconfig_gsettings_backend.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libdecoration.so.0 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcomposite.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libopengl.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiztoolbox.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libscale.so compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libcompiz_core.so.ABI-20180221 compiz-ubuntu-0.9.14.2+22.10.20220822_1
+libunity-core-6.0.so.9 unity-7.7.0+23.04.20230222.2_1
diff --git a/srcpkgs/cmake-extras/template b/srcpkgs/cmake-extras/template
new file mode 100644
index 00000000000000..0624fac7233434
--- /dev/null
+++ b/srcpkgs/cmake-extras/template
@@ -0,0 +1,13 @@
+# Template file for 'cmake-extras'
+pkgname=cmake-extras
+version=1.7
+revision=1
+build_style=cmake
+short_desc="Collection of add-ons for the CMake build tool"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://gitlab.com/ubports/development/core/cmake-extras"
+changelog="https://gitlab.com/ubports/developent/core/cmake-extras/-/raw/main/ChangeLog"
+distfiles="https://gitlab.com/ubports/development/core/cmake-extras/-/archive/main/cmake-extras-main.tar.gz"
+checksum=9748b5e10d8c73723a52c8b65be53577242a6dc27c22860bd8a79eb1e85207fd
+python_version=3
diff --git a/srcpkgs/compiz-ubuntu-devel b/srcpkgs/compiz-ubuntu-devel
new file mode 120000
index 00000000000000..139775cf005076
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu-devel
@@ -0,0 +1 @@
+compiz-ubuntu
\ No newline at end of file
diff --git a/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
new file mode 100644
index 00000000000000..b017d5ba1a3125
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0001-Fix-cmake-install-directory.patch
@@ -0,0 +1,34 @@
+From 321b926cc28bdfa0cd773b84e3a393e6055700bc Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:49:02 -0400
+Subject: [PATCH 1/5] Fix cmake install directory
+
+---
+ cmake/base.cmake | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/base.cmake b/cmake/base.cmake
+index c15c87f..23c5a5e 100644
+--- a/cmake/base.cmake
++++ b/cmake/base.cmake
+@@ -30,7 +30,7 @@ function (_check_compiz_cmake_macro)
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCompiz.cmake
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindOpenGLES2.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (findcompiz_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+ 	${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/cmake/FindCompiz.cmake ${CMAKE_ROOT}/Modules &&
+@@ -47,7 +47,7 @@ function (_check_compiz_cmake_macro)
+     install (FILES
+ 	     ${CMAKE_CURRENT_SOURCE_DIR}/compizconfig/libcompizconfig/cmake/FindCompizConfig.cmake
+ 	     DESTINATION
+-	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/)
++	     ${CMAKE_INSTALL_PREFIX}/share/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/)
+     add_custom_target (
+ 	findcompizconfig_install
+ 	${CMAKE_COMMAND} -E make_directory ${CMAKE_ROOT}/Modules &&
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
new file mode 100644
index 00000000000000..c393deb25152e7
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/patches/0004-Disable-Werror.patch
@@ -0,0 +1,25 @@
+From a545dc48937d29a8fc53376dd398ac92274fd1df Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 27 Oct 2014 21:50:02 -0400
+Subject: [PATCH 4/5] Disable -Werror
+
+---
+ cmake/CompizCommon.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/CompizCommon.cmake b/cmake/CompizCommon.cmake
+index e416a96..8e817f8 100644
+--- a/cmake/CompizCommon.cmake
++++ b/cmake/CompizCommon.cmake
+@@ -74,7 +74,7 @@ if (NOT COMPIZ_SIGN_WARNINGS)
+ endif ()
+ 
+ if (${CMAKE_PROJECT_NAME} STREQUAL "compiz")
+-    set (COMPIZ_WERROR_DEFAULT ON)
++    set (COMPIZ_WERROR_DEFAULT OFF)
+ else ()
+     set (COMPIZ_WERROR_DEFAULT OFF)
+ endif ()
+-- 
+2.10.0
+
diff --git a/srcpkgs/compiz-ubuntu/template b/srcpkgs/compiz-ubuntu/template
new file mode 100644
index 00000000000000..a3685cfb995d2d
--- /dev/null
+++ b/srcpkgs/compiz-ubuntu/template
@@ -0,0 +1,68 @@
+# Template file for 'compiz-ubuntu'
+# Package is called compiz-ubuntu to prevent confusion with compiz-reloaded.
+pkgname=compiz-ubuntu
+version=0.9.14.2+22.10.20220822
+revision=1
+_ubuntu_epoch=1
+_ubuntu_rel=0ubuntu12
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE -DUSE_GSETTINGS=ON \
+ -DCOMPIZ_DISABLE_GS_SCHEMAS_INSTALL=OFF -DCOMPIZ_BUILD_TESTING=OFF \
+ -DCOMPIZ_DISABLE_PLUGIN_KDE=ON -DUSE_KDE4=OFF -Dlibdir=/usr/lib \
+ -Dlibcompizconfig_libdir=/usr/lib"
+hostmakedepends="boost-devel coreutils desktop-file-utils intltool patchelf
+ pkg-config python3-Cython"
+makedepends="dbus-devel glibmm-devel glu-devel libICE-devel librsvg-devel
+ libSM-devel libwnck-devel libXcomposite-devel libXdamage-devel
+ libXinerama-devel libXrandr-devel libxslt-devel metacity protobuf-devel
+ python3-devel startup-notification-devel"
+depends="boost fuse gnome-settings-daemon gsettings-desktop-schemas"
+short_desc="OpenGL window and compositing manager"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only, LGPL-2.1-only, MIT"
+homepage="http://www.compiz.org/"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/compiz/${_ubuntu_epoch}:${version}-${_ubuntu_rel}/compiz_${version}-${_ubuntu_rel}.tar.xz"
+checksum=d92cf4cdebba921f258d096e21a8a10d5678470ac44d880aedf87d4011b7f082
+keep_libtool_archives=yes
+shlib_provides="libcompiz_core.so.ABI-20180221 libcompiztoolbox.so
+ libcomposite.so libopengl.so libscale.so"
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+
+	export LDFLAGS="$(echo ${LDFLAGS} | sed 's/-B[ ]*symbolic-functions//')"
+
+	export COMPIZ_DISABLE_RPATH=1
+}
+
+post_install() {
+	CMAKE_DIR=$(cmake --system-information | grep '^CMAKE_ROOT' \
+	 | awk -F\" '{print $2}')
+
+	desktop-file-install --delete-original \
+	 --dir=${DESTDIR}/usr/share/applications \
+	 ${DESTDIR}/usr/share/applications/*.desktop
+
+	mv ${DESTDIR}/usr/share/cmake-*/ ${DESTDIR}/usr/share/cmake/
+
+	vlicense COPYING.MIT
+}
+
+compiz-ubuntu-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel glibmm-devel
+	 libglib-devel libICE-devel libSM-devel libX11-devel
+	 libXcomposite-devel libXcursor-devel libXdamage-devel libXext-devel
+	 libXi-devel libXinerama-devel libxml2-devel libXrandr-devel
+	 libXrender-devel libxslt-devel pango-devel startup-notification-devel"
+	pkg_install() {
+		vmove usr/include
+		# Do not vmove libcompizconfig_gsettings_backend.so
+		vmove usr/lib/libcompiz_core.so
+		vmove usr/lib/libcompizconfig.so
+		vmove usr/lib/libdecoration.so
+		vmove usr/lib/pkgconfig
+		vmove usr/share/cmake
+	}
+}
diff --git a/srcpkgs/dbus-activation-env/patches/remove-systemd.patch b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
new file mode 100644
index 00000000000000..139b885e2ca0cf
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/patches/remove-systemd.patch
@@ -0,0 +1,12 @@
+diff -p1ru a/95dbus_update-activation-env b/95dbus_update-activation-env
+--- a/95dbus_update-activation-env	2023-12-05 23:36:45.000000000 +0800
++++ b/95dbus_update-activation-env	2024-07-19 18:27:30.809000000 +0800
+@@ -13,6 +13,6 @@ if [ -n "$DBUS_SESSION_BUS_ADDRESS" ] &&
+ 
+-    # tell dbus-daemon --session (and systemd --user, if running)
++    # tell dbus-daemon --session
+     # to put the Xsession's environment in activated services'
+     # environments
+-    dbus-update-activation-environment --verbose --systemd --all
++    dbus-update-activation-environment --verbose --all
+   )
diff --git a/srcpkgs/dbus-activation-env/template b/srcpkgs/dbus-activation-env/template
new file mode 100644
index 00000000000000..25167e523629c1
--- /dev/null
+++ b/srcpkgs/dbus-activation-env/template
@@ -0,0 +1,16 @@
+# Template file for 'dbus-activation-env'
+pkgname=dbus-activation-env
+version=1.14.10
+revision=1
+_ubuntu_rel=4ubuntu4
+depends="dbus"
+short_desc="Set session variables in dbus activation environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://launchpad.net/ubuntu/+source/dbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dbus_${version}-${_ubuntu_rel}.debian.tar.xz"
+checksum=0844907258be5dc2dccf41ec3ff80fc3baf5bde9a11f9072299e24ae29ab6721
+
+do_install() {
+	vinstall 95dbus_update-activation-env 755 etc/X11/xinit/xinitrc.d
+}
diff --git a/srcpkgs/dee-devel b/srcpkgs/dee-devel
new file mode 120000
index 00000000000000..268487bf7b680b
--- /dev/null
+++ b/srcpkgs/dee-devel
@@ -0,0 +1 @@
+dee
\ No newline at end of file
diff --git a/srcpkgs/dee-qt-devel b/srcpkgs/dee-qt-devel
new file mode 120000
index 00000000000000..43f7f17a6a64e3
--- /dev/null
+++ b/srcpkgs/dee-qt-devel
@@ -0,0 +1 @@
+dee-qt
\ No newline at end of file
diff --git a/srcpkgs/dee-qt/template b/srcpkgs/dee-qt/template
new file mode 100644
index 00000000000000..edcf05f6aa6883
--- /dev/null
+++ b/srcpkgs/dee-qt/template
@@ -0,0 +1,25 @@
+# Template file for 'dee-qt'
+pkgname=dee-qt
+version=3.3+14.04.20140317
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DWITHQT5=1"
+hostmakedepends="pkg-config"
+makedepends="dee-devel qt5-devel qt5-declarative-devel"
+checkdepends="dbus-test-runner"
+short_desc="Qt5 bindings for dee"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee-qt_${version}.orig.tar.gz"
+checksum=c372b6a5157a6614fae79bd4b75273f3ccdbde0f56e996211c000c5a3c74dfbb
+
+dee-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
new file mode 100644
index 00000000000000..9ab75d1f3486c6
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,927 @@
+diff -up dee-1.2.7/configure.ac.dep dee-1.2.7/configure.ac
+--- dee-1.2.7/configure.ac.dep	2013-09-09 05:22:35.000000000 -0400
++++ dee-1.2.7/configure.ac	2019-09-05 11:17:15.833415732 -0400
+@@ -95,7 +95,7 @@ AC_FUNC_MMAP
+ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
+ 
+ PKG_CHECK_MODULES(DEE,
+-                  glib-2.0     >= 2.32
++                  glib-2.0     >= 2.38
+                   gthread-2.0  >= 2.32
+                   gobject-2.0  >= 2.32
+                   gio-2.0      >= 2.32
+diff -up dee-1.2.7/src/dee-analyzer.c.dep dee-1.2.7/src/dee-analyzer.c
+--- dee-1.2.7/src/dee-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-analyzer.c	2019-09-05 11:22:55.498031535 -0400
+@@ -45,13 +45,6 @@
+ #include <string.h>
+ #include "dee-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeAnalyzer,
+-               dee_analyzer,
+-               G_TYPE_OBJECT);
+-
+-#define DEE_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_ANALYZER, DeeAnalyzerPrivate))
+-
+ typedef struct {
+   DeeTermFilterFunc filter_func;
+   gpointer          data;
+@@ -76,6 +69,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeAnalyzer,
++               dee_analyzer,
++               G_TYPE_OBJECT);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -195,9 +192,6 @@ dee_analyzer_class_init (DeeAnalyzerClas
+   klass->add_term_filter = dee_analyzer_add_term_filter_real;
+   klass->collate_key = dee_analyzer_collate_key_real;
+   klass->collate_cmp = dee_analyzer_collate_cmp_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeAnalyzerPrivate));
+ }
+ 
+ static void
+@@ -205,7 +199,7 @@ dee_analyzer_init (DeeAnalyzer *self)
+ {
+   DeeAnalyzerPrivate *priv;
+ 
+-  priv = self->priv = DEE_ANALYZER_GET_PRIVATE (self);
++  priv = self->priv = dee_analyzer_get_instance_private (self);
+   
+   priv->term_filters = NULL;
+   priv->term_pool = (DeeTermList*) g_object_new (DEE_TYPE_TERM_LIST, NULL);
+diff -up dee-1.2.7/src/dee-client.c.dep dee-1.2.7/src/dee-client.c
+--- dee-1.2.7/src/dee-client.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-client.c	2019-09-05 11:42:29.972418434 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeClient, dee_client, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_CLIENT, DeeClientPrivate))
+-
+ /**
+  * DeeClientPrivate:
+  *
+@@ -69,6 +64,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeClient, dee_client, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -208,8 +205,6 @@ dee_client_class_init (DeeClientClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeClientPrivate));
+-
+   object_class->constructed    = dee_client_constructed;
+   object_class->get_property   = dee_client_get_property;
+   object_class->set_property   = dee_client_set_property;
+@@ -238,7 +233,7 @@ dee_client_class_init (DeeClientClass *k
+ static void
+ dee_client_init (DeeClient *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_client_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-file-resource-manager.c.dep dee-1.2.7/src/dee-file-resource-manager.c
+--- dee-1.2.7/src/dee-file-resource-manager.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-file-resource-manager.c	2019-09-05 11:30:57.925525012 -0400
+@@ -41,14 +41,6 @@
+ #include "trace-log.h"
+ 
+ static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
+-                         dee_file_resource_manager,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
+-                                                dee_file_resource_manager_resource_manager_iface_init))
+-
+-#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate))
+ 
+ enum
+ {
+@@ -66,13 +58,20 @@ typedef struct
+   GHashTable *monitors_by_id;
+ } DeeFileResourceManagerPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager,
++                         dee_file_resource_manager,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeFileResourceManager)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER,
++                                                dee_file_resource_manager_resource_manager_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_file_resource_manager_finalize (GObject *object)
+ {
+   DeeFileResourceManagerPrivate *priv;
+   
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager*) object);
+   
+   g_slist_free_full (priv->resource_dirs, g_free);
+   priv->resource_dirs = NULL;
+@@ -121,7 +120,7 @@ dee_file_resource_manager_get_property (
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) object);
+ 
+   switch (id)
+     {
+@@ -156,9 +155,6 @@ dee_file_resource_manager_class_init (De
+                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                               | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate));
+ }
+ 
+ static void
+@@ -166,7 +162,7 @@ dee_file_resource_manager_init (DeeFileR
+ {
+   DeeFileResourceManagerPrivate *priv;
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private (self);
+   priv->resource_dirs = NULL;
+   priv->monitors_by_id = g_hash_table_new_full(g_direct_hash,
+                                                g_direct_equal,
+@@ -222,7 +218,7 @@ dee_file_resource_manager_add_search_pat
+   g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self));
+   g_return_if_fail (path != NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   priv->resource_dirs = g_slist_append (priv->resource_dirs,
+                                         g_strdup (path));
+ }
+@@ -242,7 +238,7 @@ dee_file_resource_manager_get_primary_pa
+ 
+   g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+   return (const gchar *) priv->resource_dirs->data;
+ }
+ 
+@@ -393,7 +389,7 @@ dee_file_resource_manager_load (DeeResou
+   g_return_val_if_fail (resource_name != NULL, NULL);
+   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+ 
+-  priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self);
++  priv = dee_file_resource_manager_get_instance_private ((DeeFileResourceManager *) self);
+ 
+   for (iter = priv->resource_dirs; iter != NULL; iter = iter->next)
+     {
+diff -up dee-1.2.7/src/dee-filter-model.c.dep dee-1.2.7/src/dee-filter-model.c
+--- dee-1.2.7/src/dee-filter-model.c.dep	2013-09-10 06:57:15.000000000 -0400
++++ dee-1.2.7/src/dee-filter-model.c	2019-09-05 11:32:21.687699629 -0400
+@@ -65,15 +65,6 @@
+ 
+ static void dee_filter_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
+-                         dee_filter_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_filter_model_model_iface_init));
+-
+-#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate))
+-
+ /**
+  * DeeFilterModelPrivate:
+  *
+@@ -107,6 +98,13 @@ enum
+   PROP_FILTER,
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeFilterModel,
++                         dee_filter_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeFilterModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_filter_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -332,9 +330,6 @@ dee_filter_model_class_init (DeeFilterMo
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate));
+ }
+ 
+ static void
+@@ -342,7 +337,7 @@ dee_filter_model_init (DeeFilterModel *s
+ {
+   DeeFilterModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_filter_model_get_instance_private (self);
+   
+   priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal);
+   priv->iter_list = g_sequence_new (NULL);
+diff -up dee-1.2.7/src/dee-glist-result-set.c.dep dee-1.2.7/src/dee-glist-result-set.c
+--- dee-1.2.7/src/dee-glist-result-set.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-glist-result-set.c	2019-09-05 11:37:49.387557145 -0400
+@@ -32,14 +32,6 @@
+ #include "dee-glist-result-set.h"
+ 
+ static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface);
+-G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
+-                         dee_glist_result_set,
+-                         G_TYPE_OBJECT,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
+-                                                dee_glist_result_set_result_set_iface_init))
+-
+-#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate))
+ 
+ typedef struct
+ {
+@@ -52,13 +44,20 @@ typedef struct
+   gboolean  n_rows_calculated;
+ } DeeGListResultSetPrivate;
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet,
++                         dee_glist_result_set,
++                         G_TYPE_OBJECT,
++                         G_ADD_PRIVATE(DeeGListResultSet)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET,
++                                                dee_glist_result_set_result_set_iface_init))
++
+ /* GObject Init */
+ static void
+ dee_glist_result_set_finalize (GObject *object)
+ {
+   DeeGListResultSetPrivate *priv;
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) object);
+   
+   if (priv->model)
+     g_object_unref (priv->model);
+@@ -74,9 +73,6 @@ dee_glist_result_set_class_init (DeeGLis
+   GObjectClass  *obj_class = G_OBJECT_CLASS (klass);
+ 
+   obj_class->finalize     = dee_glist_result_set_finalize;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate));
+ }
+ 
+ static void
+@@ -84,7 +80,7 @@ dee_glist_result_set_init (DeeGListResul
+ {
+   DeeGListResultSetPrivate *priv;
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private (self);
+   priv->pos = 0;
+   priv->n_rows_calculated = FALSE;
+ }
+@@ -96,7 +92,7 @@ dee_glist_result_set_get_n_rows (DeeResu
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   
+   if (!priv->n_rows_calculated)
+     {
+@@ -116,7 +112,7 @@ dee_glist_result_set_next (DeeResultSet
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   g_return_val_if_fail (dee_result_set_has_next (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   next = dee_result_set_peek (self);
+   priv->cursor = priv->cursor->next;
+   priv->pos++;
+@@ -130,7 +126,7 @@ dee_glist_result_set_has_next (DeeResult
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   return priv->cursor != NULL;
+ }
+@@ -142,7 +138,7 @@ dee_glist_result_set_peek (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+ 
+   if (priv->cursor == NULL)
+     return NULL;
+@@ -158,7 +154,7 @@ dee_glist_result_set_seek (DeeResultSet
+   
+   g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self));
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->cursor = g_list_nth (priv->rows, pos);
+   priv->pos = pos;
+ 
+@@ -177,7 +173,7 @@ dee_glist_result_set_tell (DeeResultSet
+   
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0);
+   
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->pos;
+ }
+ 
+@@ -188,7 +184,7 @@ dee_glist_result_set_get_model (DeeResul
+ 
+   g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL);
+ 
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   return priv->model;
+ }
+ 
+@@ -216,7 +212,7 @@ dee_glist_result_set_new (GList    *rows
+   DeeGListResultSetPrivate *priv;
+ 
+   self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL);
+-  priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self);
++  priv = dee_glist_result_set_get_instance_private ((DeeGListResultSet *) self);
+   priv->rows = rows;
+   priv->cursor = rows;
+   priv->model = g_object_ref (model);
+diff -up dee-1.2.7/src/dee-hash-index.c.dep dee-1.2.7/src/dee-hash-index.c
+--- dee-1.2.7/src/dee-hash-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-hash-index.c	2019-09-05 11:38:58.981034578 -0400
+@@ -37,11 +37,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
+-
+-#define DEE_HASH_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -102,6 +97,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_hash_index_finalize (GObject *object)
+@@ -180,15 +177,12 @@ dee_hash_index_class_init (DeeHashIndexC
+   idx_class->get_n_rows  = dee_hash_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_hash_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate));
+ }
+ 
+ static void
+ dee_hash_index_init (DeeHashIndex *self)
+ {
+-  self->priv = DEE_HASH_INDEX_GET_PRIVATE (self);
++  self->priv = dee_hash_index_get_instance_private (self);
+ 
+   self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+diff -up dee-1.2.7/src/dee-index.c.dep dee-1.2.7/src/dee-index.c
+--- dee-1.2.7/src/dee-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-index.c	2019-09-05 11:39:52.657860216 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT);
+-
+-#define DEE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate))
+-
+ /**
+  * DeeIndexPrivate:
+  *
+@@ -68,6 +63,8 @@ enum
+   PROP_READER
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (DeeIndex, dee_index, G_TYPE_OBJECT);
++
+ /* GObject stuff */
+ static void
+ dee_index_finalize (GObject *object)
+@@ -195,15 +192,12 @@ dee_index_class_init (DeeIndexClass *kla
+                                  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY
+                                  | G_PARAM_STATIC_STRINGS);
+     g_object_class_install_property (obj_class, PROP_READER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate));
+ }
+ 
+ static void
+ dee_index_init (DeeIndex *self)
+ {
+-  self->priv = DEE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_index_get_instance_private (self);
+ }
+ 
+ /**
+diff -up dee-1.2.7/src/dee-peer.c.dep dee-1.2.7/src/dee-peer.c
+--- dee-1.2.7/src/dee-peer.c.dep	2013-07-21 18:27:22.000000000 -0400
++++ dee-1.2.7/src/dee-peer.c	2019-09-05 11:40:51.330576540 -0400
+@@ -62,11 +62,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT)
+-
+-#define DEE_PEER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate))
+-
+ #define _DeePeerIter GSequenceIter
+ 
+ /**
+@@ -145,6 +140,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeePeer, dee_peer, G_TYPE_OBJECT)
++
+ static guint32 _peer_signals[LAST_SIGNAL] = { 0 };
+ 
+ /* Forwards */
+@@ -568,9 +565,6 @@ dee_peer_class_init (DeePeerClass *klass
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_SWARM_OWNER, pspec);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeePeerPrivate));
+ }
+ 
+ static void
+@@ -578,7 +572,7 @@ dee_peer_init (DeePeer *peer)
+ {
+   DeePeerPrivate *priv;
+ 
+-  priv = peer->priv = DEE_PEER_GET_PRIVATE (peer);
++  priv = peer->priv = dee_peer_get_instance_private (peer);
+ 
+   priv->swarm_name = NULL;
+   priv->swarm_leader = NULL;
+diff -up dee-1.2.7/src/dee-proxy-model.c.dep dee-1.2.7/src/dee-proxy-model.c
+--- dee-1.2.7/src/dee-proxy-model.c.dep	2013-09-10 06:52:03.000000000 -0400
++++ dee-1.2.7/src/dee-proxy-model.c	2019-09-05 11:43:32.123058716 -0400
+@@ -43,15 +43,6 @@
+ 
+ static void dee_proxy_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
+-                         dee_proxy_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_proxy_model_model_iface_init));
+-
+-#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -85,6 +76,13 @@ struct _DeeProxyModelPrivate
+   gulong     changeset_finished_handler;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeProxyModel,
++                         dee_proxy_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeProxyModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_proxy_model_model_iface_init));
++
+ #define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end)
+ #define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class)
+ 
+@@ -441,9 +439,6 @@ dee_proxy_model_class_init (DeeProxyMode
+                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_INHERIT_SEQNUMS, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate));
+ }
+ 
+ static void
+@@ -500,7 +495,7 @@ dee_proxy_model_init (DeeProxyModel *mod
+ {
+   DeeProxyModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_proxy_model_get_instance_private (model);
+   priv->back_end = NULL;
+   priv->inherit_seqnums = TRUE;
+   
+diff -up dee-1.2.7/src/dee-sequence-model.c.dep dee-1.2.7/src/dee-sequence-model.c
+--- dee-1.2.7/src/dee-sequence-model.c.dep	2013-09-16 14:07:09.000000000 -0400
++++ dee-1.2.7/src/dee-sequence-model.c	2019-09-05 11:45:05.301020171 -0400
+@@ -49,15 +49,6 @@
+ 
+ static void dee_sequence_model_model_iface_init (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
+-                         dee_sequence_model,
+-                         DEE_TYPE_SERIALIZABLE_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_sequence_model_model_iface_init));
+-
+-#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate))
+-
+ /* Signal ids for emitting row update signals a just a smidgeon faster */
+ static guint sigid_row_added;
+ static guint sigid_row_removed;
+@@ -85,6 +76,13 @@ struct _DeeSequenceModelPrivate
+   gboolean   setting_many;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel,
++                         dee_sequence_model,
++                         DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeSequenceModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_sequence_model_model_iface_init));
++
+ /*
+  * DeeModel forward declarations
+  */
+@@ -283,9 +281,6 @@ dee_sequence_model_class_init (DeeSequen
+   sigid_row_added = g_signal_lookup ("row-added", DEE_TYPE_MODEL);
+   sigid_row_removed = g_signal_lookup ("row-removed", DEE_TYPE_MODEL);
+   sigid_row_changed = g_signal_lookup ("row-changed", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate));
+ }
+ 
+ static void
+@@ -327,7 +322,7 @@ dee_sequence_model_init (DeeSequenceMode
+ {
+   DeeSequenceModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_sequence_model_get_instance_private (model);
+   priv->sequence = g_sequence_new (NULL);
+   priv->tags = NULL;
+   priv->setting_many = FALSE;
+diff -up dee-1.2.7/src/dee-serializable-model.c.dep dee-1.2.7/src/dee-serializable-model.c
+--- dee-1.2.7/src/dee-serializable-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-serializable-model.c	2019-09-05 11:46:05.331706803 -0400
+@@ -47,16 +47,6 @@
+ static void     dee_serializable_model_model_iface_init (DeeModelIface *iface);
+ static void     dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface);
+ static GObject* dee_serializable_model_parse_serialized (GVariant *data);
+-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
+-                                  dee_serializable_model,
+-                                  G_TYPE_OBJECT,
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                         dee_serializable_model_model_iface_init)
+-                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                         dee_serializable_model_serializable_iface_init));
+-
+-#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate))
+ 
+ #define MODEL_VARIANT_TYPE_1_0 G_VARIANT_TYPE ("(asaav(tt))")
+ #define MODEL_VARIANT_TYPE     G_VARIANT_TYPE ("(asaav(tt)a{sv})")
+@@ -80,6 +70,15 @@ struct _DeeSerializableModelPrivate
+   gboolean    inside_changeset;
+ };
+ 
++G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel,
++                                  dee_serializable_model,
++                                  G_TYPE_OBJECT,
++                                  G_ADD_PRIVATE(DeeSerializableModel)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                         dee_serializable_model_model_iface_init)
++                                  G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                         dee_serializable_model_serializable_iface_init));
++
+ typedef struct _FieldSchemaInfo FieldSchemaInfo;
+ 
+ struct _FieldSchemaInfo
+@@ -362,9 +361,6 @@ dee_serializable_model_class_init (DeeSe
+ 
+   sigid_changeset_started = g_signal_lookup ("changeset-started", DEE_TYPE_MODEL);
+   sigid_changeset_finished = g_signal_lookup ("changeset-finished", DEE_TYPE_MODEL);
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate));
+ }
+ 
+ static void
+@@ -372,7 +368,7 @@ dee_serializable_model_init (DeeSerializ
+ {
+   DeeSerializableModelPrivate *priv;
+ 
+-  priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model);
++  priv = model->priv = dee_serializable_model_get_instance_private (model);
+ 
+   priv->seqnum = 0;
+ 
+diff -up dee-1.2.7/src/dee-server.c.dep dee-1.2.7/src/dee-server.c
+--- dee-1.2.7/src/dee-server.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-server.c	2019-09-05 11:41:45.727386434 -0400
+@@ -39,11 +39,6 @@
+ #include "dee-marshal.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeServer, dee_server, DEE_TYPE_PEER)
+-
+-#define GET_PRIVATE(o) \
+-      (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEE_TYPE_SERVER, DeeServerPrivate))
+-
+ #define ACTIVE_CONNECTIONS_KEY "dee-active-connections-list"
+ #define CONNECTION_ACCEPTED_KEY "dee-connection-accepted"
+ 
+@@ -78,6 +73,8 @@ enum
+   LAST_SIGNAL
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeServer, dee_server, DEE_TYPE_PEER)
++
+ //static guint32 _server_signals[LAST_SIGNAL] = { 0 };
+ static GHashTable *active_servers = NULL;
+ 
+@@ -397,8 +394,6 @@ dee_server_class_init (DeeServerClass *k
+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+   DeePeerClass *peer_class = DEE_PEER_CLASS (klass);
+ 
+-  g_type_class_add_private (klass, sizeof (DeeServerPrivate));
+-
+   object_class->constructed = dee_server_constructed;
+   object_class->get_property = dee_server_get_property;
+   object_class->set_property = dee_server_set_property;
+@@ -447,7 +442,7 @@ dee_server_class_init (DeeServerClass *k
+ static void
+ dee_server_init (DeeServer *self)
+ {
+-  self->priv = GET_PRIVATE (self);
++  self->priv = dee_server_get_instance_private (self);
+ 
+   self->priv->connection_id_map = g_hash_table_new_full (g_direct_hash,
+                                                          g_direct_equal,
+diff -up dee-1.2.7/src/dee-shared-model.c.dep dee-1.2.7/src/dee-shared-model.c
+--- dee-1.2.7/src/dee-shared-model.c.dep	2019-09-05 11:17:15.831415776 -0400
++++ dee-1.2.7/src/dee-shared-model.c	2019-09-05 11:46:58.495543664 -0400
+@@ -61,17 +61,6 @@ static void dee_shared_model_serializabl
+ 
+ static void dee_shared_model_model_iface_init        (DeeModelIface *iface);
+ 
+-G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
+-                         dee_shared_model,
+-                         DEE_TYPE_PROXY_MODEL,
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
+-                                                dee_shared_model_serializable_iface_init)
+-                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+-                                                dee_shared_model_model_iface_init));
+-
+-#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate))
+-
+ #define COMMIT_VARIANT_TYPE   G_VARIANT_TYPE("(sasaavauay(tt))")
+ #define COMMIT_TUPLE_ITEMS    6
+ #define CLONE_VARIANT_TYPE    G_VARIANT_TYPE("(sasaavauay(tt)a{sv})")
+@@ -109,6 +98,15 @@ struct _DeeSharedModelPrivate
+   DeeSharedModelFlushMode flush_mode;
+ };
+ 
++G_DEFINE_TYPE_WITH_CODE (DeeSharedModel,
++                         dee_shared_model,
++                         DEE_TYPE_PROXY_MODEL,
++                         G_ADD_PRIVATE(DeeSharedModel)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE,
++                                                dee_shared_model_serializable_iface_init)
++                         G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
++                                                dee_shared_model_model_iface_init));
++
+ typedef struct
+ {
+   /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */
+@@ -806,9 +804,6 @@ dee_shared_model_class_init (DeeSharedMo
+                   G_TYPE_NONE, 2,
+                   G_TYPE_UINT64, G_TYPE_UINT64);
+ 
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate));
+-
+   /* Runtime-check that our defines are correct */
+   g_assert (g_variant_type_n_items (CLONE_VARIANT_TYPE) == CLONE_TUPLE_ITEMS);
+   g_assert (g_variant_type_n_items (COMMIT_VARIANT_TYPE) == COMMIT_TUPLE_ITEMS);
+@@ -819,7 +814,7 @@ dee_shared_model_init (DeeSharedModel *s
+ {
+   DeeSharedModelPrivate *priv;
+ 
+-  priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self);
++  priv = self->priv = dee_shared_model_get_instance_private (self);
+ 
+   priv->swarm = NULL;
+   priv->model_path = NULL;
+diff -up dee-1.2.7/src/dee-term-list.c.dep dee-1.2.7/src/dee-term-list.c
+--- dee-1.2.7/src/dee-term-list.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-term-list.c	2019-09-05 11:47:44.472537770 -0400
+@@ -43,11 +43,6 @@
+ #include "dee-term-list.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
+-
+-#define DEE_TERM_LIST_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -93,6 +88,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTermList, dee_term_list, G_TYPE_OBJECT);
++
+ #define CHECK_LAZY_SETUP(term_list) \
+   if (G_UNLIKELY(term_list->priv->chunk == NULL)) \
+     { \
+@@ -154,9 +151,6 @@ dee_term_list_class_init (DeeTermListCla
+                                 | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_FILTER, pspec);
+   */
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate));
+ }
+ 
+ static void
+@@ -164,7 +158,7 @@ dee_term_list_init (DeeTermList *self)
+ {
+   DeeTermListPrivate *priv;
+ 
+-  priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self);
++  priv = self->priv = dee_term_list_get_instance_private (self);
+ 
+   /* The chunk and terms are allocated lazily, to make clone() work more
+    * eficiently */
+diff -up dee-1.2.7/src/dee-text-analyzer.c.dep dee-1.2.7/src/dee-text-analyzer.c
+--- dee-1.2.7/src/dee-text-analyzer.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-text-analyzer.c	2019-09-05 11:48:34.262448464 -0400
+@@ -36,14 +36,6 @@
+ 
+ #include "dee-text-analyzer.h"
+ 
+-G_DEFINE_TYPE (DeeTextAnalyzer,
+-               dee_text_analyzer,
+-               DEE_TYPE_ANALYZER);
+-
+-#define DEE_TEXT_ANALYZER_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TEXT_ANALYZER, DeeTextAnalyzerPrivate))
+-
+-
+ /**
+  * DeeAnalyzerPrivate:
+  *
+@@ -59,6 +51,10 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTextAnalyzer,
++               dee_text_analyzer,
++               DEE_TYPE_ANALYZER);
++
+ /*
+  * DeeAnalyzer forward declarations
+  */
+@@ -88,15 +84,12 @@ dee_text_analyzer_class_init (DeeTextAna
+ 
+   a_class->tokenize = dee_text_analyzer_tokenize_real;
+   a_class->collate_key = dee_text_analyzer_collate_key_real;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTextAnalyzerPrivate));
+ }
+ 
+ static void
+ dee_text_analyzer_init (DeeTextAnalyzer *self)
+ {
+-  self->priv = DEE_TEXT_ANALYZER_GET_PRIVATE (self);
++  self->priv = dee_text_analyzer_get_instance_private (self);
+ }
+ 
+ /*
+diff -up dee-1.2.7/src/dee-transaction.c.dep dee-1.2.7/src/dee-transaction.c
+--- dee-1.2.7/src/dee-transaction.c.dep	2012-11-28 03:46:41.000000000 -0500
++++ dee-1.2.7/src/dee-transaction.c	2019-09-05 11:49:21.474415553 -0400
+@@ -403,12 +403,10 @@ static void dee_transaction_model_iface_
+ G_DEFINE_TYPE_WITH_CODE (DeeTransaction,
+                          dee_transaction,
+                          DEE_TYPE_SERIALIZABLE_MODEL,
++                         G_ADD_PRIVATE(DeeTransaction)
+                          G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL,
+                                                 dee_transaction_model_iface_init));
+ 
+-#define DEE_TRANSACTION_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TRANSACTION, DeeTransactionPrivate))
+-
+ enum
+ {
+   PROP_0,
+@@ -644,9 +642,6 @@ dee_transaction_class_init (DeeTransacti
+                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+                                | G_PARAM_STATIC_STRINGS);
+   g_object_class_install_property (obj_class, PROP_TARGET, pspec);
+-  
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTransactionPrivate));
+ }
+ 
+ static void
+@@ -695,7 +690,7 @@ dee_transaction_init (DeeTransaction *mo
+ {
+   DeeTransactionPrivate *priv;
+ 
+-  priv = model->priv = DEE_TRANSACTION_GET_PRIVATE (model);
++  priv = model->priv = dee_transaction_get_instance_private (model);
+   priv->target = NULL;
+   
+   priv->journal = g_hash_table_new (g_direct_hash, g_direct_equal);
+diff -up dee-1.2.7/src/dee-tree-index.c.dep dee-1.2.7/src/dee-tree-index.c
+--- dee-1.2.7/src/dee-tree-index.c.dep	2012-11-08 05:13:46.000000000 -0500
++++ dee-1.2.7/src/dee-tree-index.c	2019-09-05 11:50:32.860853766 -0400
+@@ -40,11 +40,6 @@
+ #include "dee-glist-result-set.h"
+ #include "trace-log.h"
+ 
+-G_DEFINE_TYPE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
+-
+-#define DEE_TREE_INDEX_GET_PRIVATE(obj) \
+-  (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TREE_INDEX, DeeTreeIndexPrivate))
+-
+ /*
+  * FORWARDS
+  */
+@@ -310,6 +305,8 @@ enum
+   PROP_0,
+ };
+ 
++G_DEFINE_TYPE_WITH_PRIVATE (DeeTreeIndex, dee_tree_index, DEE_TYPE_INDEX);
++
+ /* GObject stuff */
+ static void
+ dee_tree_index_finalize (GObject *object)
+@@ -388,15 +385,12 @@ dee_tree_index_class_init (DeeTreeIndexC
+   idx_class->get_n_rows  = dee_tree_index_get_n_rows;
+   idx_class->get_n_rows_for_term = dee_tree_index_get_n_rows_for_term;
+   idx_class->get_supported_term_match_flags  = dee_tree_index_get_supported_term_match_flags;
+-
+-  /* Add private data */
+-  g_type_class_add_private (obj_class, sizeof (DeeTreeIndexPrivate));
+ }
+ 
+ static void
+ dee_tree_index_init (DeeTreeIndex *self)
+ {
+-  self->priv = DEE_TREE_INDEX_GET_PRIVATE (self);
++  self->priv = dee_tree_index_get_instance_private (self);
+ 
+   self->priv->terms = g_sequence_new ((GDestroyNotify) term_destroy);
+   self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal,
diff --git a/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
new file mode 100644
index 00000000000000..61fd40994c4213
--- /dev/null
+++ b/srcpkgs/dee/patches/dee-1.2.7-fix-duplicates-vala-0.5X.patch
@@ -0,0 +1,24 @@
+diff -up dee-1.2.7/vapi/Dee-1.0.metadata.spot dee-1.2.7/vapi/Dee-1.0.metadata
+--- dee-1.2.7/vapi/Dee-1.0.metadata.spot	2022-01-10 13:09:03.075105767 -0500
++++ dee-1.2.7/vapi/Dee-1.0.metadata	2022-01-10 13:10:20.477570607 -0500
+@@ -1,6 +1,10 @@
+ GListResultSet skip
+ GListResultSetClass skip
+ 
++Filter
++	.new skip
++	.destroy skip
++
+ FilterModel
+         .filter skip // unsupported type for construct property
+ Index
+@@ -22,6 +26,9 @@ Model
+ 	.get_tag skip
+ 	.set_tag skip
+ 	.clear_tag skip
++ModelReader
++	.destroy skip
++
+ 
+ SerializableParseFunc skip=false
+ Serializable
diff --git a/srcpkgs/dee/patches/vapi-skip-properties.patch b/srcpkgs/dee/patches/vapi-skip-properties.patch
new file mode 100644
index 00000000000000..3a9353a5212a48
--- /dev/null
+++ b/srcpkgs/dee/patches/vapi-skip-properties.patch
@@ -0,0 +1,15 @@
+Index: dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+===================================================================
+--- dee-1.2.7+17.10.20170616.orig/vapi/Dee-1.0.metadata
++++ dee-1.2.7+17.10.20170616/vapi/Dee-1.0.metadata
+@@ -2,7 +2,9 @@ GListResultSet skip
+ GListResultSetClass skip
+ 
+ FilterModel
+-	.filter unowned
++        .filter skip // unsupported type for construct property
++Index
++        .reader skip // unsupported type for construct property
+ Model
+ 	.append skip=false
+ 	.build_named_row skip
diff --git a/srcpkgs/dee/template b/srcpkgs/dee/template
new file mode 100644
index 00000000000000..d0a1d859e5703a
--- /dev/null
+++ b/srcpkgs/dee/template
@@ -0,0 +1,38 @@
+# Template file for 'dee'
+pkgname=dee
+version=1.2.7+17.10.20170616
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --disable-static --disable-tests"
+hostmakedepends="automake gobject-introspection gtk-doc pkg-config vala"
+makedepends="glib-devel icu-devel"
+depends="dbus-glib python python3 python3-gobject"
+short_desc="Model to synchronize multiple instances over DBus"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/dee"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/dee_${version}.orig.tar.gz"
+checksum=e63f979a7a5012a7786786f8081a9279256ab28ece6e557c6ce5bf87535ae899
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	autoreconf -fi
+	export PYTHON="/usr/bin/python"
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+dee-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/glewmx-devel b/srcpkgs/glewmx-devel
new file mode 120000
index 00000000000000..5f2ab6e5b90a05
--- /dev/null
+++ b/srcpkgs/glewmx-devel
@@ -0,0 +1 @@
+glewmx
\ No newline at end of file
diff --git a/srcpkgs/glewmx/template b/srcpkgs/glewmx/template
new file mode 100644
index 00000000000000..bcbd8c4ec1497b
--- /dev/null
+++ b/srcpkgs/glewmx/template
@@ -0,0 +1,67 @@
+# Template file for 'glewmx'
+pkgname=glewmx
+version=1.13.0
+revision=1
+_ubuntu_rel=5build1
+build_style=gnu-makefile
+configure_args=GLEW_DEST="${DESTDIR}/usr"
+make_install_target="install.all"
+hostmakedepends="wget"
+makedepends="libglvnd-devel libX11-devel"
+depends="glu libXi libXmu"
+short_desc="OpenGL Extension Wrangler MX"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="BSD-3-Clause, MIT, GPL-2.0-or-later"
+homepage="http://launchpad.net/ubuntu/+source/glewmx"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}.orig.tar.gz"
+checksum=aa25dc48ed84b0b64b8d41cdd42c8f40f149c37fa2ffa39cd97f42c78d128bc7
+
+post_extract() {
+	wget "https://launchpad.net/ubuntu/+archive/primary/+files/glewmx_${version}-${_ubuntu_rel}.debian.tar.xz"
+	vextract --no-strip-components \
+	glewmx_${version}-${_ubuntu_rel}.debian.tar.xz
+}
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	sed -i 's|lib64|lib|' config/Makefile.linux
+	sed -i '/^.PHONY: .*\.pc$/d' Makefile
+}
+
+do_build() {
+	make CC=$CC AR=$AR AS=$AS LD=$CC RANLIB=$RANLIB \
+		CFLAGS.EXTRA="-fPIC $CFLAGS $CPPFLAGS" \
+		LDFLAGS.EXTRA="$LDFLAGS" ${makejobs}
+}
+
+post_install() {
+	mv "${DESTDIR}/usr/include/GL/glew.h" \
+	"${DESTDIR}/usr/include/GL/glewmx.h"
+	mv "${DESTDIR}/usr/include/GL/glxew.h" \
+	"${DESTDIR}/usr/include/GL/glxewmx.h"
+	mv "${DESTDIR}/usr/include/GL/wglew.h" \
+	"${DESTDIR}/usr/include/GL/wglewmx.h"
+
+	rm -R ${DESTDIR}/usr/bin
+	rm ${DESTDIR}/usr/lib/libGLEW.so
+	rm ${DESTDIR}/usr/lib/libGLEW.a
+	rm ${DESTDIR}/usr/lib/pkgconfig/glew.pc
+
+	chmod 0755 "${DESTDIR}"/usr/lib/libGLEW*.so.${version}
+
+	vlicense LICENSE.txt
+}
+
+glewmx-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} glu-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-qt-devel b/srcpkgs/gsettings-qt-devel
new file mode 120000
index 00000000000000..6402e122b23a69
--- /dev/null
+++ b/srcpkgs/gsettings-qt-devel
@@ -0,0 +1 @@
+gsettings-qt
\ No newline at end of file
diff --git a/srcpkgs/gsettings-qt/template b/srcpkgs/gsettings-qt/template
new file mode 100644
index 00000000000000..c34ac2e2fd1aeb
--- /dev/null
+++ b/srcpkgs/gsettings-qt/template
@@ -0,0 +1,30 @@
+# Template file for 'gsettings-qt'
+pkgname=gsettings-qt
+version=0.2
+revision=1
+build_style=qmake
+configure_args="gsettings-qt.pro"
+hostmakedepends="pkg-config"
+makedepends="qt5-devel qt5-declarative-devel"
+short_desc="Library to access GSettings from Qt"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/gsettings-qt"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-qt_${version}.orig.tar.gz"
+checksum=1ee20cc73f0c3c6afc6910e6b60fd1236e6bcc42920f7b2442aca208914cd7f8
+
+do_patch() {
+	sed -i -e 's|tests/tests.pro||g' \
+	-e 's|tests/cpptest.pro||g' \
+	gsettings-qt.pro
+}
+
+gsettings-qt-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/gsettings-ubuntu-schemas-devel b/srcpkgs/gsettings-ubuntu-schemas-devel
new file mode 120000
index 00000000000000..141e42a05c7f47
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas-devel
@@ -0,0 +1 @@
+gsettings-ubuntu-schemas
\ No newline at end of file
diff --git a/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
new file mode 100644
index 00000000000000..bb01c49ef40954
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/files/50-com.ubuntu.AccountsService.rules
@@ -0,0 +1,29 @@
+/* Original:
+ * [Allow greeter to set fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterChangeAny
+ * ResultAny=no
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterChangeAny') {
+        return polkit.Result.YES;
+    }
+});
+
+/* Original:
+ * [Allow greeter to read fields]
+ * Identity=unix-user:lightdm
+ * Action=com.ubuntu.AccountsService.GreeterReadAny
+ * ResultAny=yes
+ * ResultInactive=yes
+ * ResultActive=yes
+ */
+polkit.addRule(function (action, subject) {
+    if (subject.user == 'lightdm' &&
+            action.id == 'com.ubuntu.AccountsService.GreeterReadAny') {
+        return polkit.Result.YES;
+    }
+});
diff --git a/srcpkgs/gsettings-ubuntu-schemas/template b/srcpkgs/gsettings-ubuntu-schemas/template
new file mode 100644
index 00000000000000..2f3e1ca2bdeb65
--- /dev/null
+++ b/srcpkgs/gsettings-ubuntu-schemas/template
@@ -0,0 +1,34 @@
+# Template file for 'gsettings-ubuntu-schemas'
+pkgname=gsettings-ubuntu-schemas
+version=0.0.7+21.10.20210712
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --localstatedir=/var"
+hostmakedepends="automake gettext-devel intltool pkg-config"
+makedepends="glib-devel"
+depends="glib"
+short_desc="GSettings desktop-wide schemas for Ubuntu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/gsettings-ubuntu-touch-schemas"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/gsettings-ubuntu-touch-schemas_${version}.orig.tar.gz"
+checksum=a4a1c328f73e82b5ef69293c7e051fb37c25184cc5cb52e7b7a96f5a9de5b3fc
+
+pre_configure() {
+	autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-com.ubuntu.AccountsService.rules 644 usr/share/polkit-1/rules.d
+
+	rm -v "${DESTDIR}"/var/lib/polkit-1/localauthority/10-vendor.d/50-com.ubuntu.AccountsService.pkla
+}
+
+gsettings-ubuntu-schemas-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/hud-devel b/srcpkgs/hud-devel
new file mode 120000
index 00000000000000..4b151978cf42bf
--- /dev/null
+++ b/srcpkgs/hud-devel
@@ -0,0 +1 @@
+hud
\ No newline at end of file
diff --git a/srcpkgs/hud/files/hud/run b/srcpkgs/hud/files/hud/run
new file mode 100644
index 00000000000000..3f85d694beebae
--- /dev/null
+++ b/srcpkgs/hud/files/hud/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/hud-service
diff --git a/srcpkgs/hud/files/window-stack-bridge/run b/srcpkgs/hud/files/window-stack-bridge/run
new file mode 100644
index 00000000000000..898e9f8edb971e
--- /dev/null
+++ b/srcpkgs/hud/files/window-stack-bridge/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/hud/patches/0001-Use-Python-2.patch b/srcpkgs/hud/patches/0001-Use-Python-2.patch
new file mode 100644
index 00000000000000..16a0ee95edf4ff
--- /dev/null
+++ b/srcpkgs/hud/patches/0001-Use-Python-2.patch
@@ -0,0 +1,58 @@
+From cedb4ccb4cd7c99e75b9d7e882acc615d7179277 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:18:42 -0500
+Subject: [PATCH 1/2] Use Python 2
+
+---
+ tools/hudkeywords/CMakeLists.txt  | 4 ++--
+ tools/hudkeywords/bin/hudkeywords | 4 ++--
+ tools/hudkeywords/setup.py        | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tools/hudkeywords/CMakeLists.txt b/tools/hudkeywords/CMakeLists.txt
+index 6dacd93..0a6d7a3 100644
+--- a/tools/hudkeywords/CMakeLists.txt
++++ b/tools/hudkeywords/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-find_program(PYTHON "python")
++find_program(PYTHON "python2")
+ 
+ if (PYTHON)
+   set(PYTHON_ROOT ${CMAKE_INSTALL_PREFIX})
+@@ -48,4 +48,4 @@ if (PYTHON)
+   
+   add_test(hudkeywords-check ${PYTHON} ${SETUP_PY} test)
+   set_tests_properties(hudkeywords-check PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+-endif()
+\ No newline at end of file
++endif()
+diff --git a/tools/hudkeywords/bin/hudkeywords b/tools/hudkeywords/bin/hudkeywords
+index 4e0a9b9..61f8d28 100755
+--- a/tools/hudkeywords/bin/hudkeywords
++++ b/tools/hudkeywords/bin/hudkeywords
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+@@ -20,4 +20,4 @@ import sys
+ from hudkeywords import cli
+ 
+ if __name__ == '__main__':
+-    sys.exit(cli.main())
+\ No newline at end of file
++    sys.exit(cli.main())
+diff --git a/tools/hudkeywords/setup.py b/tools/hudkeywords/setup.py
+index 3742f5e..ccc13db 100755
+--- a/tools/hudkeywords/setup.py
++++ b/tools/hudkeywords/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ 
+ # Copyright (C) 2005-2012 Canonical Ltd
+ #
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
new file mode 100644
index 00000000000000..3fdd4014a5674a
--- /dev/null
+++ b/srcpkgs/hud/patches/0002-Remove-test-dependencies.patch
@@ -0,0 +1,29 @@
+From f4d43095b7293ce0514ad9a570da1328cfdc8d71 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 14:19:47 -0500
+Subject: [PATCH 2/2] Remove test dependencies
+
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2b483ff..370b505 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -98,12 +98,6 @@ include_directories(${DBUSMENU_INCLUDE_DIRS})
+ find_package(Qt5Test REQUIRED)
+ include_directories(${Qt5Test_INCLUDE_DIRS})
+ 
+-pkg_check_modules(QTDBUSTEST REQUIRED libqtdbustest-1 REQUIRED)
+-include_directories(${QTDBUSTEST_INCLUDE_DIRS})
+-
+-pkg_check_modules(QTDBUSMOCK REQUIRED libqtdbusmock-1 REQUIRED)
+-include_directories(${QTDBUSMOCK_INCLUDE_DIRS})
+-
+ find_package(Vala 0.12)
+ 
+ find_package(GObjectIntrospection 0.9.12)
+-- 
+2.7.0
+
diff --git a/srcpkgs/hud/patches/fix-systemd-user-dir.patch b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..592ebf7a9652e3
--- /dev/null
+++ b/srcpkgs/hud/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2017-06-19 17:16:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-25 14:25:12.980000000 +0800
+@@ -37,3 +37,3 @@ DESTINATION ${DBUSSERVICEDIR}
+ # where to install
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ message (STATUS "${SYSTEMD_USER_DIR} is the systemd user unit file install dir")
diff --git a/srcpkgs/hud/template b/srcpkgs/hud/template
new file mode 100644
index 00000000000000..15b17d5501e4ff
--- /dev/null
+++ b/srcpkgs/hud/template
@@ -0,0 +1,56 @@
+# Template file for 'hud'
+pkgname=hud
+version=14.10+17.10.20170619
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DENABLE_DOCUMENTATION=ON \
+ -DENABLE_TESTS=OFF -DENABLE_VOICE_TESTS=OFF -DENABLE_SCALABILITY_TESTS=OFF \
+ -DFULL_WARNINGS=ON"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="cmake-extras glib-devel gobject-introspection gtk-doc intltool
+ pkg-config python-setuptools qt5 qt5-plugin-mysql qt5-plugin-odbc
+ qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds vala wget"
+makedepends="dee-qt-devel gsettings-qt-devel gtk+3-devel libcolumbus-devel
+ libdbusmenu-glib-devel libdbusmenu-qt5-devel pango-devel"
+depends="bamf libdbusmenu-gtk3 sqlite"
+short_desc="Backend for the Unity HUD"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/hud"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}.orig.tar.gz"
+checksum=3cb825f0f98dae4dc26ef90a1cadab80c4c7bdf45f3cb7082437ba12e2ca2aa6
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/hud_${version}-${_ubuntu_rel}.diff.gz
+	gunzip hud_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i hud_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -lc"
+}
+
+post_install() {
+	vsv hud
+	vsv window-stack-bridge
+}
+
+hud-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-application/patches/0001_autoconf.patch b/srcpkgs/indicator-application/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..f6dd2ad82f1cf3
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-application-12.10.1daily13.01.11.orig/configure.ac indicator-application-12.10.1daily13.01.11/configure.ac
+--- indicator-application-12.10.1daily13.01.11.orig/configure.ac	2013-01-12 10:22:02.405959692 -0500
++++ indicator-application-12.10.1daily13.01.11/configure.ac	2013-01-12 10:22:12.069242219 -0500
+@@ -4,7 +4,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE(indicator-application, 12.10.0)
+ 
+ AM_MAINTAINER_MODE
diff --git a/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..4f0dd1c1d929f9
--- /dev/null
+++ b/srcpkgs/indicator-application/patches/use-ayatana-libraries.patch
@@ -0,0 +1,61 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 17:34:53.413000000 +0800
++++ b/configure.ac	2024-07-22 17:43:07.897000000 +0800
+@@ -34,3 +34,2 @@ GTK_REQUIRED_VERSION=3.0.0
+ GIO_REQUIRED_VERSION=2.26
+-INDICATOR_REQUIRED_VERSION=0.3.5
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -39,4 +38,2 @@ DBUS_GLIB_REQUIRED_VERSION=0.82
+ 
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.2.9
+-
+ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >= $GLIB_REQUIRED_VERSION
+@@ -44,3 +41,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
+@@ -48,3 +45,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION)
+-PKG_CHECK_MODULES(APPINDICATOR, appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION)
++PKG_CHECK_MODULES(APPINDICATOR, ayatana-appindicator3-0.1)
+ 
+@@ -87,4 +84,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/application-service-appstore.c b/src/application-service-appstore.c
+--- a/src/application-service-appstore.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/application-service-appstore.c	2024-07-22 17:48:27.569000000 +0800
+@@ -26,5 +26,5 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator-object.h>
+-#include "libappindicator/app-indicator.h"
+-#include "libappindicator/app-indicator-enum-types.h"
++#include <libayatana-indicator/indicator-object.h>
++#include "libayatana-appindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator-enum-types.h"
+ #include "application-service-appstore.h"
+diff -p1ru a/src/generate-id.h b/src/generate-id.h
+--- a/src/generate-id.h	2019-03-08 23:35:42.000000000 +0800
++++ b/src/generate-id.h	2024-07-22 17:51:52.750000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib.h>
+-#include "libappindicator/app-indicator.h"
++#include "libayatana-appindicator/app-indicator.h"
+ 
+diff -p1ru a/src/indicator-application.c b/src/indicator-application.c
+--- a/src/indicator-application.c	2019-03-08 23:35:42.000000000 +0800
++++ b/src/indicator-application.c	2024-07-22 17:55:31.850000000 +0800
+@@ -37,5 +37,5 @@ with this program.  If not, see <http://
+ /* Indicator Stuff */
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
diff --git a/srcpkgs/indicator-application/template b/srcpkgs/indicator-application/template
new file mode 100644
index 00000000000000..82dbb4b833a04a
--- /dev/null
+++ b/srcpkgs/indicator-application/template
@@ -0,0 +1,20 @@
+# Template file for 'indicator-application'
+pkgname=indicator-application
+version=12.10.1+19.04.20190308.1
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake pkg-config"
+makedepends="dbus-glib-devel json-glib-devel libayatana-appindicator-devel
+ libayatana-indicator-devel libdbusmenu-gtk3-devel"
+short_desc="Indicator to take menus from applications and place them in the panel"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-application"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-application_${version}.orig.tar.gz"
+checksum=f701326a6cfb6fd963d398b649353d68acdffad9f8cdcdca7a8b8cb0a60d6da2
+CFLAGS=" -Wno-error"
+
+pre_configure() {
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..a8d613158c5ee4
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru indicator-appmenu-12.10.3.orig/configure.ac indicator-appmenu-12.10.3/configure.ac
+--- indicator-appmenu-12.10.3.orig/configure.ac	2013-01-07 06:59:33.344260743 -0500
++++ indicator-appmenu-12.10.3/configure.ac	2013-01-07 06:59:44.277538125 -0500
+@@ -8,7 +8,7 @@
+ 
+ AC_PREREQ(2.53)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_MACRO_DIR([m4])
+ 
diff --git a/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..328cc2875901df
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/patches/use-ayatana-libraries.patch
@@ -0,0 +1,46 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-22 18:30:45.785000000 +0800
++++ b/configure.ac	2024-07-22 18:36:04.901000000 +0800
+@@ -62,3 +62,2 @@ GIO_REQUIRED_VERSION=2.26
+ GTK_REQUIRED_VERSION=3.0
+-INDICATOR_REQUIRED_VERSION=0.3.90
+ DBUSMENUGTK_REQUIRED_VERSION=0.5.90
+@@ -70,3 +69,3 @@ PKG_CHECK_MODULES(INDICATOR,  glib-2.0 >
+                               gtk+-3.0 >= $GTK_REQUIRED_VERSION
+-                              indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION
++                              ayatana-indicator3-0.4
+                               dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+@@ -94,3 +93,2 @@ AM_CONDITIONAL([BUILD_CLI], [test "x$has
+ DBUSMENU_JSONLOADER_REQUIRED_VERSION=0.3.3
+-LIBAPPINDICATOR_REQUIRED_VERSION=0.0.0
+ 
+@@ -103,3 +101,3 @@ if test x"$enable_tests" != x"no" ; then
+                      dbusmenu-jsonloader-0.4 >= $DBUSMENU_JSONLOADER_REQUIRED_VERSION
+-                     appindicator3-0.1 >= $LIBAPPINDICATOR_REQUIRED_VERSION,
++                     ayatana-appindicator3-0.1,
+                      [have_dbusmenu_jsonloader=yes],
+@@ -155,4 +153,4 @@ elif test "x$with_gtk" = x2; then
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-appmenu.c b/src/indicator-appmenu.c
+--- a/src/indicator-appmenu.c	2020-06-17 23:10:55.000000000 +0800
++++ b/src/indicator-appmenu.c	2024-07-22 18:41:58.495000000 +0800
+@@ -32,4 +32,4 @@ with this program.  If not, see <http://
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/src/window-menu.h b/src/window-menu.h
+--- a/src/window-menu.h	2020-06-17 23:10:47.000000000 +0800
++++ b/src/window-menu.h	2024-07-22 18:41:41.534000000 +0800
+@@ -25,3 +25,3 @@ with this program.  If not, see <http://
+ #include <glib-object.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-appmenu/template b/srcpkgs/indicator-appmenu/template
new file mode 100644
index 00000000000000..d4ea86b7b8ea6a
--- /dev/null
+++ b/srcpkgs/indicator-appmenu/template
@@ -0,0 +1,24 @@
+# Template file for 'indicator-appmenu'
+pkgname=indicator-appmenu
+version=15.02.0+20.10.20200617.2
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+hostmakedepends="automake gettext-devel gtk-doc intltool pkg-config vala"
+makedepends="bamf-devel libayatana-indicator-devel libdbusmenu-gtk3-devel"
+depends="dconf libayatana-appindicator"
+short_desc="Indicator to host the menus from an application"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-appmenu"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-appmenu_${version}.orig.tar.gz"
+checksum=78f59751869391b12959b0bdbfa62d332c22d128718411390e15cfe2ab14b41d
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+
+	gtkdocize
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
new file mode 100644
index 00000000000000..c6c7f905066486
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/remove-urldispatch.patch
@@ -0,0 +1,25 @@
+diff -ur src-old/src/desktop.vala src-new/src/desktop.vala
+--- src-old/src/desktop.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/desktop.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -226,9 +226,7 @@
+ 
+   void show_settings (string panel)
+   {
+-    if (Environment.get_variable ("MIR_SOCKET") != null)
+-      UrlDispatch.send ("settings:///system/bluetooth");
+-    else if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
++    if (is_desktop ("Unity") && Environment.find_program_in_path ("unity-control-center") != null)
+       spawn_command_line_async ("unity-control-center " + panel);
+     else
+       spawn_command_line_async ("gnome-control-center " + panel);
+diff -ur src-old/src/phone.vala src-new/src/phone.vala
+--- src-old/src/phone.vala	2022-11-13 21:43:27.938338601 +0530
++++ src-new/src/phone.vala	2022-11-13 21:43:51.021649215 +0530
+@@ -62,7 +62,6 @@
+ 
+   void show_settings (string panel)
+   {
+-    UrlDispatch.send ("settings:///system/bluetooth");
+   }
+ 
+   Action create_settings_action ()
diff --git a/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bbb72389582b09
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/profile.vala b/src/profile.vala
+--- a/src/profile.vala	2017-06-06 06:06:07.000000000 +0800
++++ b/src/profile.vala	2024-08-03 13:41:33.343081742 +0800
+@@ -100,4 +100,4 @@ class Profile: Object
+ 
+-    item.set_attribute ("x-canonical-type", "s",
+-                        "com.canonical.indicator.root");
++    item.set_attribute ("x-ayatana-type", "s",
++                        "org.ayatana.indicator.root");
+ 
diff --git a/srcpkgs/indicator-bluetooth/template b/srcpkgs/indicator-bluetooth/template
new file mode 100644
index 00000000000000..7528be29fccc73
--- /dev/null
+++ b/srcpkgs/indicator-bluetooth/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-bluetooth'
+pkgname=indicator-bluetooth
+version=0.0.6+17.10.20170605
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config python3
+ vala"
+depends="bluez dconf libnotify"
+short_desc="Indicator to connect to Bluetooth devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-bluetooth"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-bluetooth_${version}.orig.tar.gz"
+checksum=d67cf0687526c9e9e70c451242fd6f3db0588ce052d2ef498680fcea0083e846
+CFLAGS="-Wno-error"
+
+post_patch() {
+	sed -i \
+	 -e 's/gio-unix-2.0 >= $GIO_REQUIRED_VERSION/gio-unix-2.0 >= $GIO_REQUIRED_VERSION])/g' \
+	 -e '/url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION])/d' \
+	 configure.ac
+	rm vapi/url-dispatcher.vapi
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+post_configure() {
+	sed -i -e '/--pkg url-dispatcher \\/d' src/Makefile.in
+}
+
+pre_build() {
+	export SED=sed
+}
diff --git a/srcpkgs/indicator-datetime/files/indicator-datetime/run b/srcpkgs/indicator-datetime/files/indicator-datetime/run
new file mode 100644
index 00000000000000..90d281602947b8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/files/indicator-datetime/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/indicator-datetime/patches/disable-tests.patch b/srcpkgs/indicator-datetime/patches/disable-tests.patch
new file mode 100644
index 00000000000000..03aed215006c75
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/disable-tests.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-03-05 05:44:01.868501000 +0800
++++ b/CMakeLists.txt	2024-07-24 18:03:25.135000000 +0800
+@@ -16,8 +16,2 @@ add_definitions(-DALARM_DEFAULT_SOUND="$
+ 
+-
+-##
+-## Always Be Testing
+-##
+-enable_testing()
+-
+ ##
+@@ -84,3 +78,2 @@ add_subdirectory(data)
+ add_subdirectory(po)
+-add_subdirectory(tests)
+ 
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..126ce4c0122dc1
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-08-08 12:57:10.803323830 +0800
+@@ -346,4 +346,4 @@ private:
+             g_menu_item_set_action_and_target_value (item, "indicator.calendar", v);
+-            g_menu_item_set_attribute (item, "x-canonical-type",
+-                                       "s", "com.canonical.indicator.calendar");
++            g_menu_item_set_attribute (item, "x-ayatana-type",
++                                       "s", "org.ayatana.indicator.calendar");
+             if (action_name != nullptr)
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-08-08 12:58:25.775818817 +0800
+@@ -133,4 +133,4 @@ protected:
+         {
+-            g_menu_model_get_item_attribute(section, 1, "x-canonical-type", "s", &str);
+-            EXPECT_STREQ("com.canonical.indicator.calendar", str);
++            g_menu_model_get_item_attribute(section, 1, "x-ayatana-type", "s", &str);
++            EXPECT_STREQ("org.ayatana.indicator.calendar", str);
+             g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..bdc9d63ea456c8
--- /dev/null
+++ b/srcpkgs/indicator-datetime/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,20 @@
+diff -p1ru a/src/menu.cpp b/src/menu.cpp
+--- a/src/menu.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/src/menu.cpp	2024-07-31 09:43:50.165020138 +0800
+@@ -295,4 +295,4 @@ private:
+         auto header = g_menu_item_new(nullptr, detailed_action.c_str());
+-        g_menu_item_set_attribute(header, "x-canonical-type", "s",
+-                                  "com.canonical.indicator.root");
++        g_menu_item_set_attribute(header, "x-ayatana-type", "s",
++                                  "org.ayatana.indicator.root");
+         g_menu_item_set_attribute(header, "submenu-action", "s",
+diff -p1ru a/tests/test-menus.cpp b/tests/test-menus.cpp
+--- a/tests/test-menus.cpp	2021-03-05 05:44:01.868501000 +0800
++++ b/tests/test-menus.cpp	2024-07-31 09:44:32.703740129 +0800
+@@ -64,4 +64,4 @@ protected:
+         gchar* str = nullptr;
+-        g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
+-        EXPECT_STREQ("com.canonical.indicator.root", str);
++        g_menu_model_get_item_attribute(menu_model, 0, "x-ayatana-type", "s", &str);
++        EXPECT_STREQ("org.ayatana.indicator.root", str);
+         g_clear_pointer(&str, g_free);
diff --git a/srcpkgs/indicator-datetime/template b/srcpkgs/indicator-datetime/template
new file mode 100644
index 00000000000000..8523acad65b0fc
--- /dev/null
+++ b/srcpkgs/indicator-datetime/template
@@ -0,0 +1,28 @@
+# Template file for 'indicator-datetime'
+pkgname=indicator-datetime
+version=15.10+21.04.20210304
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel gcr gettext gtest-devel
+ intltool pkg-config python3-dbusmock"
+makedepends="evolution-data-server-devel gstreamer1-devel
+ indicator-messages-devel libaccounts-glib-devel libnotify-devel
+ properties-cpp"
+depends="gsettings-ubuntu-schemas libtimezonemap openrc-settingsd
+ unity-control-center"
+short_desc="Very, very simple clock"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-datetime"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=29af10576be2f83a790aa0e5fd9ff8aba0792822e145cd1adcbb54c98c21c6a4
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	vsv indicator-datetime
+}
diff --git a/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
new file mode 100644
index 00000000000000..eafe9ce816cc9d
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0002-Remove-code-depending-on-accountsservices-patch.patch
@@ -0,0 +1,68 @@
+From 1dadb93567e8607611979c515e8b6152cd36f3f3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Fri, 11 Apr 2014 15:46:47 -0400
+Subject: [PATCH 2/6] Remove code depending on accountsservices patch
+
+---
+ lib/main.vala | 38 +-------------------------------------
+ 1 file changed, 1 insertion(+), 37 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index fbaf5a1..eab8d1c 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -305,25 +305,7 @@ public class Indicator.Keyboard.Service : Object {
+ 				Act.User? user = manager.get_user ((!) greeter_user);
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+-					foreach (var outer in ((!) user).input_sources) {
+-						foreach (var inner in (!) outer) {
+-							unowned string key;
+-							unowned string value;
+-
+-							((!) inner).get ("{&s&s}", out key, out value);
+-
+-							if (key == "xkb") {
+-								source = value;
+-								break;
+-							}
+-						}
+-
+-						if (source != null) {
+-							break;
+-						}
+-					}
+-
+-					if (source == null) {
++					if (true) {
+ 						var layouts = ((!) user).xkeyboard_layouts;
+ 
+ 						if (layouts.length <= 0) {
+@@ -495,24 +477,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			if (user.is_loaded) {
+ 				var done = false;
+ 
+-				foreach (var outer in user.input_sources) {
+-					foreach (var inner in (!) outer) {
+-						unowned string key;
+-						unowned string source;
+-
+-						((!) inner).get ("{&s&s}", out key, out source);
+-
+-						if (key == "xkb") {
+-							done = true;
+-
+-							if (!added.contains (source)) {
+-								list.add (source);
+-								added.add (source);
+-							}
+-						}
+-					}
+-				}
+-
+ 				if (!done) {
+ 					var layouts = user.xkeyboard_layouts;
+ 					foreach (var layout in layouts) {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
new file mode 100644
index 00000000000000..6992f47b394220
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0003-Remove-unavailable-DBus-method-activate_input_source.patch
@@ -0,0 +1,176 @@
+From 65db4152bb88101a5ea205bec7e7593e5d24f440 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 12 Apr 2014 14:23:53 -0400
+Subject: [PATCH 3/6] Remove unavailable DBus method activate_input_source
+
+---
+ lib/Makefile.am          |  1 -
+ lib/keyboard-plugin.vala | 23 -----------------------
+ lib/main.vala            | 29 -----------------------------
+ tests/main.vala          | 40 ----------------------------------------
+ 4 files changed, 93 deletions(-)
+ delete mode 100644 lib/keyboard-plugin.vala
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 4e5a86a..7fdbcb0 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -12,7 +12,6 @@ indicator_keyboard_service_SOURCES = main.vala            \
+                                      ibus-menu.vala       \
+                                      ibus-panel.vala      \
+                                      indicator-menu.vala  \
+-                                     keyboard-plugin.vala \
+                                      window-stack.vala    \
+                                      unity-session.vala   \
+                                      unity-greeter.vala
+diff --git a/lib/keyboard-plugin.vala b/lib/keyboard-plugin.vala
+deleted file mode 100644
+index 5ee8ea2..0000000
+--- a/lib/keyboard-plugin.vala
++++ /dev/null
+@@ -1,23 +0,0 @@
+-/*
+- * Copyright 2014 Canonical Ltd.
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, version 3 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authors: William Hua <william.hua@canonical.com>
+- */
+-
+-[DBus (name="com.canonical.SettingsDaemon.Keyboard.Private")]
+-public interface KeyboardPlugin : Object {
+-
+-	public abstract void activate_input_source (uint index) throws IOError;
+-}
+diff --git a/lib/main.vala b/lib/main.vala
+index eab8d1c..d230d16 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -53,7 +53,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	private IndicatorMenu? desktop_greeter_menu;
+ 	private IndicatorMenu? desktop_lockscreen_menu;
+ 
+-	private KeyboardPlugin? keyboard_plugin;
+ 	private UnitySession? unity_session;
+ 	private UnityGreeter? unity_greeter;
+ 	private string? greeter_user;
+@@ -110,12 +109,6 @@ public class Indicator.Keyboard.Service : Object {
+ 			}
+ 		} else {
+ 			Bus.watch_name (BusType.SESSION,
+-			                "org.gnome.SettingsDaemon.Keyboard",
+-			                BusNameWatcherFlags.NONE,
+-			                handle_keyboard_name_appeared,
+-			                handle_keyboard_name_vanished);
+-
+-			Bus.watch_name (BusType.SESSION,
+ 			                "com.canonical.Unity",
+ 			                BusNameWatcherFlags.NONE,
+ 			                handle_unity_name_appeared,
+@@ -808,14 +801,6 @@ public class Indicator.Keyboard.Service : Object {
+ 		if (value != null) {
+ 			((!) active_action).set_state ((!) value);
+ 			update_indicator_action ();
+-
+-			if (keyboard_plugin != null) {
+-				try {
+-					((!) keyboard_plugin).activate_input_source (((!) value).get_uint32 ());
+-				} catch (IOError error) {
+-					warning ("error: %s", error.message);
+-				}
+-			}
+ 		}
+ 	}
+ 
+@@ -1145,20 +1130,6 @@ public class Indicator.Keyboard.Service : Object {
+ 	}
+ 
+ 	[DBus (visible = false)]
+-	private void handle_keyboard_name_appeared (DBusConnection connection, string name, string name_owner) {
+-		try {
+-			keyboard_plugin = Bus.get_proxy_sync (BusType.SESSION, name, "/org/gnome/SettingsDaemon/Keyboard");
+-		} catch (IOError error) {
+-			warning ("error: %s", error.message);
+-		}
+-	}
+-
+-	[DBus (visible = false)]
+-	private void handle_keyboard_name_vanished (DBusConnection connection, string name) {
+-		keyboard_plugin = null;
+-	}
+-
+-	[DBus (visible = false)]
+ 	private void handle_unity_name_appeared (DBusConnection connection, string name, string name_owner) {
+ 		try {
+ 			var session = Bus.get_proxy_sync<UnitySession> (BusType.SESSION, name, "/com/canonical/Unity/Session");
+diff --git a/tests/main.vala b/tests/main.vala
+index e2782d1..2d9a265 100644
+--- a/tests/main.vala
++++ b/tests/main.vala
+@@ -137,45 +137,6 @@ public class Tests : Object, Fixture {
+ 		}
+ 	}
+ 
+-	public void test_activate_input_source () {
+-		try {
+-			var current = 0;
+-			var sources = "[('xkb', 'us'), ('xkb', 'ca+eng'), ('xkb', 'epo'), ('ibus', 'pinyin')]";
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources current $current");
+-			Process.spawn_command_line_sync (@"gsettings set org.gnome.desktop.input-sources sources \"$sources\"");
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-
+-		var action_group = DBusActionGroup.get ((!) _connection,
+-		                                        "com.canonical.indicator.keyboard",
+-		                                        "/com/canonical/indicator/keyboard");
+-		action_group.list_actions ();
+-		action_group.activate_action ("current", new Variant.uint32 (2));
+-
+-		var loop = new MainLoop (null, false);
+-		Timeout.add_seconds (TIMEOUT_S, () => { loop.quit (); return false; });
+-		loop.run ();
+-
+-		var state = action_group.get_action_state ("current");
+-		var current = state.get_uint32 ();
+-		stderr.printf ("current = %u\n", current);
+-		assert (current == 2);
+-
+-		try {
+-			string output;
+-			Process.spawn_command_line_sync ("gsettings get org.gnome.desktop.input-sources current", out output);
+-			stderr.printf ("output = \"%s\"\n", output);
+-			assert (strcmp (output, "uint32 2\n") == 0);
+-		} catch (SpawnError error) {
+-			Test.message ("error: %s", error.message);
+-			Test.fail ();
+-			return;
+-		}
+-	}
+-
+ 	public void test_activate_character_map () {
+ 		var action_group = DBusActionGroup.get ((!) _connection,
+ 		                                        "com.canonical.indicator.keyboard",
+@@ -636,7 +597,6 @@ public int main (string[] args) {
+ 
+ 	Test.init (ref args);
+ 
+-	Test.add_data_func ("/indicator-keyboard-service/activate-input-source", Fixture.create<Tests> (Tests.test_activate_input_source));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-character-map", Fixture.create<Tests> (Tests.test_activate_character_map));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-keyboard-layout-chart", Fixture.create<Tests> (Tests.test_activate_keyboard_layout_chart));
+ 	Test.add_data_func ("/indicator-keyboard-service/activate-text-entry-settings", Fixture.create<Tests> (Tests.test_activate_text_entry_settings));
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
new file mode 100644
index 00000000000000..2760981b4bc312
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0004-Remove-unavailable-DBus-method-xkeyboard-layouts.patch
@@ -0,0 +1,51 @@
+From 41e1b2613e6c089a8f893cc44650e2bb59586ba4 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Wed, 16 Apr 2014 17:06:46 -0400
+Subject: [PATCH 4/6] Remove unavailable DBus method xkeyboard-layouts
+
+---
+ lib/main.vala | 20 ++------------------
+ 1 file changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index d230d16..aa61a22 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -299,9 +299,9 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 				if (user != null && ((!) user).is_loaded) {
+ 					if (true) {
+-						var layouts = ((!) user).xkeyboard_layouts;
++						string[] layouts = null;
+ 
+-						if (layouts.length <= 0) {
++						if (true) {
+ 							var user_list = LightDM.UserList.get_instance ();
+ 							LightDM.User? light_user = user_list.get_user_by_name ((!) greeter_user);
+ 
+@@ -471,22 +471,6 @@ public class Indicator.Keyboard.Service : Object {
+ 				var done = false;
+ 
+ 				if (!done) {
+-					var layouts = user.xkeyboard_layouts;
+-					foreach (var layout in layouts) {
+-						done = true;
+-
+-						var source = layout;
+-						source = source.replace (" ", "+");
+-						source = source.replace ("\t", "+");
+-
+-						if (!added.contains (source)) {
+-							list.add (source);
+-							added.add (source);
+-						}
+-					}
+-				}
+-
+-				if (!done) {
+ 					var user_list = LightDM.UserList.get_instance ();
+ 					LightDM.User? light_user = user_list.get_user_by_name (user.user_name);
+ 
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
new file mode 100644
index 00000000000000..9e6380067d6fcb
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/patches/0005-Spawn-ibus-daemon-at-startup.patch
@@ -0,0 +1,31 @@
+From 8302afe21f2c953b02d4a028ce0ec7e0d95feec3 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 19:23:08 -0400
+Subject: [PATCH 5/6] Spawn ibus-daemon at startup
+
+---
+ lib/main.vala | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/lib/main.vala b/lib/main.vala
+index aa61a22..7f3c0e1 100644
+--- a/lib/main.vala
++++ b/lib/main.vala
+@@ -1183,6 +1183,14 @@ public class Indicator.Keyboard.Service : Object {
+ 
+ 	[DBus (visible = false)]
+ 	public static int main (string[] args) {
++		// Launch ibus-daemon the same way gnome-shell 3.14 does
++		string[] cmd = {"ibus-daemon", "--xim", "--panel", "disable"};
++		try {
++			new Subprocess.newv (cmd, SubprocessFlags.NONE);
++		} catch (Error e) {
++			warning ("Failed to launch ibus-daemon: %s", e.message);
++		}
++
+ 		Service.service = new Service (ref args);
+ 
+ 		Posix.signal (Posix.SIGTERM, (code) => {
+-- 
+2.9.3
+
diff --git a/srcpkgs/indicator-keyboard/template b/srcpkgs/indicator-keyboard/template
new file mode 100644
index 00000000000000..2729d6e869c58c
--- /dev/null
+++ b/srcpkgs/indicator-keyboard/template
@@ -0,0 +1,27 @@
+# Template file for 'indicator-keyboard'
+pkgname=indicator-keyboard
+version=0.0.0+19.10.20220803
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib"
+hostmakedepends="automake gettext-devel gobject-introspection intltool
+ pkg-config vala"
+makedepends="accountsservice-devel fcitx-devel gnome-desktop-devel ibus-devel
+ libgee-devel libgnomekbd-devel lightdm-devel"
+depends="gucharmap libgnomekbd unity-control-center"
+short_desc="Indicator for switching keyboard layouts and input methods"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-keyboard"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-keyboard_${version}.orig.tar.gz"
+checksum=7916f3827408bd7cb82856c931b807c4b8a69efe0c165d05db17942e2f982b5a
+make_check=ci-skip # "Invalid UTF-8" error
+
+post_patch() {
+	sed -i "s/string\[\] layouts = null/string\[\] layouts = new string\[0\]/g" lib/main.vala
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
diff --git a/srcpkgs/indicator-messages-devel b/srcpkgs/indicator-messages-devel
new file mode 120000
index 00000000000000..ea82efb8581ae6
--- /dev/null
+++ b/srcpkgs/indicator-messages-devel
@@ -0,0 +1 @@
+indicator-messages
\ No newline at end of file
diff --git a/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
new file mode 100644
index 00000000000000..15f9d428442f29
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0001-autoconf-fix.patch
@@ -0,0 +1,25 @@
+From e5701bb817321555b2da56eec45ecb953f47fd50 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:14 -0400
+Subject: [PATCH 1/2] autoconf fix
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9c8800..bf751ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(indicator-messages, 12.10.5)
+ 
+ AC_PREREQ(2.62)
+ 
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ AM_INIT_AUTOMAKE([check-news])
+ 
+ AM_MAINTAINER_MODE
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
new file mode 100644
index 00000000000000..66a13ffe73f534
--- /dev/null
+++ b/srcpkgs/indicator-messages/patches/0002-Disable-tests.patch
@@ -0,0 +1,25 @@
+From 8d311e61e56487562c32a132f2ba7cda38ed5066 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 15 Mar 2015 17:52:51 -0400
+Subject: [PATCH 2/2] Disable tests
+
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index bf751ba..faeb72e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,8 +48,6 @@ PKG_CHECK_MODULES(APPLET, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION
+ 
+ PKG_CHECK_MODULES(GIO, gio-unix-2.0 >= $GIO_UNIX_REQUIRED_VERSION)
+ 
+-PKG_CHECK_MODULES(DBUSTEST, dbustest-1)
+-
+ AC_SUBST(APPLET_CFLAGS)
+ AC_SUBST(APPLET_LIBS)
+ 
+-- 
+2.3.3
+
diff --git a/srcpkgs/indicator-messages/template b/srcpkgs/indicator-messages/template
new file mode 100644
index 00000000000000..b653babd6f7736
--- /dev/null
+++ b/srcpkgs/indicator-messages/template
@@ -0,0 +1,35 @@
+# Template file for 'indicator-messages'
+pkgname=indicator-messages
+version=13.10.1+18.10.20180918
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ gtk-doc intltool pkg-config vala"
+makedepends="accountsservice-devel"
+depends="hicolor-icon-theme libayatana-indicator"
+short_desc="Place on the user's desktop that collects messages that need a response"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-messages"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-messages_${version}.orig.tar.gz"
+checksum=d051dd845912e2f5d6be5bfcbd9ce2c53460f011707d29ab728bee5f15938ce7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	intltoolize -f
+	autoreconf -vfi
+}
+
+indicator-messages-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/indicator-power/files/indicator-power/run b/srcpkgs/indicator-power/files/indicator-power/run
new file mode 100644
index 00000000000000..69001f1959ced6
--- /dev/null
+++ b/srcpkgs/indicator-power/files/indicator-power/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
new file mode 100644
index 00000000000000..f07af2f3828bfd
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/0001-Not-a-phone.patch
@@ -0,0 +1,198 @@
+From b27c0f555140c6f3be153c95ea8ab5da36711326 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 14:56:18 -0400
+Subject: [PATCH] Not a phone
+
+---
+ CMakeLists.txt     |  3 +--
+ src/CMakeLists.txt |  4 ----
+ src/notifier.c     | 69 +-----------------------------------------------------
+ src/service.c      |  3 ---
+ 4 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 26e437e..ec93e81 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -45,8 +45,7 @@ pkg_check_modules(SERVICE_DEPS REQUIRED
+                   gio-2.0>=2.36
+                   gio-unix-2.0>=2.36
+                   gudev-1.0>=204
+-                  libnotify>=0.7.6
+-                  url-dispatcher-1>=1)
++                  libnotify>=0.7.6)
+ 
+ include_directories (SYSTEM ${SERVICE_DEPS_INCLUDE_DIRS})
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index c588aa1..4327fed 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -25,10 +25,6 @@ add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-testing
+                                  com.canonical.indicator.power
+                                  Dbus
+                                  ${CMAKE_SOURCE_DIR}/data/com.canonical.indicator.power.Testing.xml)
+-add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-accounts-sound
+-                                 com.ubuntu.touch
+-                                 Dbus
+-                                 /usr/share/accountsservice/interfaces/com.ubuntu.touch.AccountsService.Sound.xml)
+ 
+ # add the bin dir to our include path so the code can find the generated header files
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+diff --git a/src/notifier.c b/src/notifier.c
+index 5e516f9..2f68f8f 100644
+--- a/src/notifier.c
++++ b/src/notifier.c
+@@ -18,13 +18,10 @@
+  */
+ 
+ #include "datafiles.h"
+-#include "dbus-accounts-sound.h"
+ #include "dbus-battery.h"
+ #include "dbus-shared.h"
+ #include "notifier.h"
+ 
+-#include <url-dispatcher.h>
+-
+ #include <libnotify/notify.h>
+ 
+ #include <glib/gi18n.h>
+@@ -81,8 +78,6 @@ typedef struct
+   gboolean actions_supported;
+ 
+   GCancellable * cancellable;
+-  DbusAccountsServiceSound * accounts_service_sound_proxy;
+-  gboolean accounts_service_sound_proxy_pending;
+ }
+ IndicatorPowerNotifierPrivate;
+ 
+@@ -137,54 +132,6 @@ get_battery_power_level (IndicatorPowerDevice * battery)
+ }
+ 
+ /***
+-****  Sounds
+-***/
+-
+-static void
+-on_sound_proxy_ready (GObject      * source_object G_GNUC_UNUSED,
+-                      GAsyncResult * res,
+-                      gpointer       gself)
+-{
+-  GError * error;
+-  DbusAccountsServiceSound * proxy;
+-
+-  error = NULL;
+-  proxy = dbus_accounts_service_sound_proxy_new_for_bus_finish (res, &error);
+-  if (error != NULL)
+-    {
+-      if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+-        {
+-          get_priv(gself)->accounts_service_sound_proxy_pending = FALSE;
+-          g_debug("%s Couldn't find accounts service sound proxy: %s", G_STRLOC, error->message);
+-        }
+-
+-      g_clear_error(&error);
+-    }
+-  else
+-    {
+-      IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(gself);
+-      priv_t * const p = get_priv (self);
+-      g_clear_object (&p->accounts_service_sound_proxy);
+-      p->accounts_service_sound_proxy = proxy;
+-      p->accounts_service_sound_proxy_pending = FALSE;
+-    }
+-}
+-
+-static gboolean
+-silent_mode (IndicatorPowerNotifier * self)
+-{
+-  priv_t * const p = get_priv (self);
+-
+-  /* if we don't have a proxy yet, assume we're in silent mode
+-     as a "do no harm" level of response */
+-  if (p->accounts_service_sound_proxy_pending)
+-    return TRUE;
+-
+-  return (p->accounts_service_sound_proxy != NULL)
+-      && dbus_accounts_service_sound_get_silent_mode(p->accounts_service_sound_proxy);
+-}
+-
+-/***
+ ****  Notifications
+ ***/
+ 
+@@ -226,7 +173,6 @@ on_battery_settings_clicked(NotifyNotification * nn        G_GNUC_UNUSED,
+                             char               * action    G_GNUC_UNUSED,
+                             gpointer             user_data G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ static void
+@@ -298,7 +244,7 @@ notification_show(IndicatorPowerNotifier * self)
+ 
+   if (are_actions_supported(self))
+     {
+-      if (!silent_mode(self))
++      if (1)
+         {
+           gchar* filename = datafile_find(DATAFILE_TYPE_SOUND, LOW_BATTERY_SOUND);
+           if (filename != NULL)
+@@ -439,7 +385,6 @@ my_dispose (GObject * o)
+   notification_clear (self);
+   indicator_power_notifier_set_battery (self, NULL);
+   g_clear_object (&p->dbus_battery);
+-  g_clear_object (&p->accounts_service_sound_proxy);
+ 
+   G_OBJECT_CLASS (indicator_power_notifier_parent_class)->dispose (o);
+ }
+@@ -473,18 +418,6 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self)
+ 
+   if (!instance_count++ && !notify_init(SERVICE_EXEC))
+     g_critical("Unable to initialize libnotify! Notifications might not be shown.");
+-
+-  p->accounts_service_sound_proxy_pending = TRUE;
+-  gchar* object_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
+-  dbus_accounts_service_sound_proxy_new_for_bus(
+-    G_BUS_TYPE_SYSTEM,
+-    G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+-    "org.freedesktop.Accounts",
+-    object_path,
+-    p->cancellable,
+-    on_sound_proxy_ready,
+-    self);
+-  g_clear_pointer(&object_path, g_free);
+ }
+ 
+ static void
+diff --git a/src/service.c b/src/service.c
+index 87625e4..a44fdae 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,7 +20,6 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+-#include <url-dispatcher.h>
+ 
+ #include "brightness.h"
+ #include "dbus-shared.h"
+@@ -804,7 +803,6 @@ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+     {
+       if (g_getenv ("MIR_SOCKET") != NULL)
+         {
+-          url_dispatch_send("settings:///system/battery", NULL, NULL);
+           return;
+         }
+       else if (!g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "xubuntu"))
+@@ -852,7 +850,6 @@ on_phone_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                              GVariant      * param  G_GNUC_UNUSED,
+                              gpointer        gself  G_GNUC_UNUSED)
+ {
+-  url_dispatch_send("settings:///system/battery", NULL, NULL);
+ }
+ 
+ /***
+-- 
+2.9.2
+
diff --git a/srcpkgs/indicator-power/patches/disable-tests.patch b/srcpkgs/indicator-power/patches/disable-tests.patch
new file mode 100644
index 00000000000000..24ff9f82d39c4d
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/disable-tests.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2024-07-24 17:29:08.116000000 +0800
++++ b/CMakeLists.txt	2024-07-24 17:33:55.177000000 +0800
+@@ -84,4 +84,2 @@ add_subdirectory(po)
+ # testing & coverage
+-enable_testing ()
+-add_subdirectory(tests)
+ find_package(CoverageReport)
diff --git a/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..1b6bee0ed19d65
--- /dev/null
+++ b/srcpkgs/indicator-power/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,10 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2024-08-03 10:50:29.773380597 +0800
++++ b/src/service.c	2024-08-03 10:54:10.156134073 +0800
+@@ -776,4 +776,4 @@ create_menu (IndicatorPowerService * sel
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type",
+-                             "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type",
++                             "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-power/template b/srcpkgs/indicator-power/template
new file mode 100644
index 00000000000000..721c32951a2955
--- /dev/null
+++ b/srcpkgs/indicator-power/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-power'
+pkgname=indicator-power
+version=12.10.6+17.10.20170829.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -Denable_tests=OFF"
+hostmakedepends="cmake-extras dbus-test-runner-devel glib-devel gtest-devel
+ intltool pkg-config python"
+makedepends="libnotify-devel"
+depends="dconf gnome-power-manager unity-control-center upower"
+short_desc="Indicator to show the power status of your devices"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-power"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-power_${version}.orig.tar.gz"
+checksum=033dda58971929de265a1dc262932c31a69fc64522bc9f5f0be850585d27e3df
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+}
+
+post_install() {
+	find "${DESTDIR}" -type f -name '*.a' -delete
+	vsv indicator-power
+}
diff --git a/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..e676fd9abafa45
--- /dev/null
+++ b/srcpkgs/indicator-printers/patches/use-ayatana-libraries.patch
@@ -0,0 +1,45 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2024-07-24 14:19:43.674000000 +0800
++++ b/configure.ac	2024-07-24 15:48:03.604000000 +0800
+@@ -42,6 +42,6 @@ AC_CONFIG_FILES([
+ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= 3.0
+-                          indicator3-0.4 >= 0.2
++                          ayatana-indicator3-0.4 >= 0.2
+                           dbusmenu-gtk3-0.4 >= 0.2)
+ PKG_CHECK_MODULES(SERVICE, gtk+-3.0 >= 3.0
+-                           indicator3-0.4 >= 0.2
++                           ayatana-indicator3-0.4 >= 0.2
+                            dbusmenu-glib-0.4 >= 0.2)
+@@ -72,4 +72,4 @@ if test "x$with_localinstall" = "xyes";
+ else
+-	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
+-	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4`
++	INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
++	INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4`
+ fi
+diff -p1ru a/src/indicator-printers-service.c b/src/indicator-printers-service.c
+--- a/src/indicator-printers-service.c	2024-07-24 14:19:43.622000000 +0800
++++ b/src/indicator-printers-service.c	2024-07-24 15:53:32.546000000 +0800
+@@ -18,3 +18,3 @@
+ 
+-#include <libindicator/indicator-service.h>
++#include <libayatana-indicator/indicator-service.h>
+ #include <libdbusmenu-glib/dbusmenu-glib.h>
+diff -p1ru a/src/indicator-printers.c b/src/indicator-printers.c
+--- a/src/indicator-printers.c	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.c	2024-07-24 16:01:35.326000000 +0800
+@@ -28,4 +28,4 @@
+ 
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-image-helper.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-image-helper.h>
+ 
+diff -p1ru a/src/indicator-printers.h b/src/indicator-printers.h
+--- a/src/indicator-printers.h	2017-11-17 23:09:26.000000000 +0800
++++ b/src/indicator-printers.h	2024-07-24 15:56:49.431000000 +0800
+@@ -21,3 +21,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/indicator-printers/template b/srcpkgs/indicator-printers/template
new file mode 100644
index 00000000000000..3ceaf4b3d7e2da
--- /dev/null
+++ b/srcpkgs/indicator-printers/template
@@ -0,0 +1,37 @@
+# Template file for 'indicator-printers'
+pkgname=indicator-printers
+version=0.1.7+17.10.20171101
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config python
+ wget"
+makedepends="cups-devel libayatana-indicator-devel libdbusmenu-glib-devel
+ libdbusmenu-gtk3-devel"
+depends="cups"
+short_desc="Indicator showing active print jobs"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-printers"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}.orig.tar.gz"
+checksum=9fd274dac99caf1caeb90950565c3d845bcd2577b7fa5c9d199939435d8b4be9
+
+do_patch() {
+	wget  https://launchpad.net/ubuntu/+archive/primary/+files/indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-printers_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-printers_${version}-${_ubuntu_rel}.diff
+}
+
+post_patch() {
+	sed -i '/SERVICE_LIBS/ i SERVICE_LIBS+=" "' configure.ac
+}
+
+pre_configure() {
+	NOCONFIGURE=1 autoreconf -i
+}
+
+post_install() {
+	vmkdir usr/share/icons 755
+	cp -r debian/local/* "${DESTDIR}"/usr/share/icons/
+}
diff --git a/srcpkgs/indicator-session/files/indicator-session/run b/srcpkgs/indicator-session/files/indicator-session/run
new file mode 100644
index 00000000000000..835fbce86f4005
--- /dev/null
+++ b/srcpkgs/indicator-session/files/indicator-session/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
new file mode 100644
index 00000000000000..ae3ba662c71835
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0001-There-is-no-help.patch
@@ -0,0 +1,80 @@
+From ec67d4d2a1f6252f952234aaf8cf6db62a8a3e0a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 9 Aug 2014 15:17:45 -0400
+Subject: [PATCH 1/3] There is no help
+
+---
+ src/service.c         | 12 ------------
+ tests/test-service.cc |  6 ------
+ 2 files changed, 18 deletions(-)
+
+diff --git a/src/service.c b/src/service.c
+index 8be7241..96790a4 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -455,15 +455,12 @@ create_admin_section (IndicatorSessionService * self)
+ {
+   GMenu * menu;
+   priv_t * p = self->priv;
+-  gchar * help_label = g_strdup_printf(_("%s Help…"), get_distro_name());
+   menu = g_menu_new ();
+   if (g_getenv ("MIR_SOCKET") != NULL) {
+       g_menu_append (menu, _("About This Device…"), "indicator.about");
+   } else {
+       g_menu_append (menu, _("About This Computer"), "indicator.about");
+   }
+-  g_menu_append (menu, help_label, "indicator.help");
+-  g_free (help_label);
+ 
+   if (p->usage_mode_action && g_getenv ("MIR_SOCKET") != NULL) // only under unity8
+   {
+@@ -930,14 +927,6 @@ on_online_accounts_activated (GSimpleAction * a      G_GNUC_UNUSED,
+ }
+ 
+ static void
+-on_help_activated (GSimpleAction  * a      G_GNUC_UNUSED,
+-                   GVariant       * param  G_GNUC_UNUSED,
+-                   gpointer         gself)
+-{
+-  indicator_session_actions_help (get_backend_actions(gself));
+-}
+-
+-static void
+ on_settings_activated (GSimpleAction * a      G_GNUC_UNUSED,
+                        GVariant      * param  G_GNUC_UNUSED,
+                        gpointer        gself)
+@@ -1028,7 +1017,6 @@ init_gactions (IndicatorSessionService * self)
+ 
+   GActionEntry entries[] = {
+     { "about",                  on_about_activated           },
+-    { "help",                   on_help_activated            },
+     { "hibernate",              on_hibernate_activated       },
+     { "logout",                 on_logout_activated          },
+     { "online-accounts",        on_online_accounts_activated },
+diff --git a/tests/test-service.cc b/tests/test-service.cc
+index 9ee7236..5885cc8 100644
+--- a/tests/test-service.cc
++++ b/tests/test-service.cc
+@@ -383,11 +383,6 @@ TEST_F (ServiceTest, About)
+   test_simple_action ("about");
+ }
+ 
+-TEST_F (ServiceTest, Help)
+-{
+-  test_simple_action ("help");
+-}
+-
+ TEST_F (ServiceTest, Hibernate)
+ {
+   test_simple_action ("hibernate");
+@@ -693,7 +688,6 @@ TEST_F (ServiceTest, LockdownUserSwitchingAndLockScreen)
+ TEST_F (ServiceTest, DefaultMenuItems)
+ {
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.about", NULL, NULL));
+-  ASSERT_TRUE (find_menu_item_for_action ("indicator.help", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.settings", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-screensaver", NULL, NULL));
+   ASSERT_TRUE (find_menu_item_for_action ("indicator.switch-to-guest", NULL, NULL));
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
new file mode 100644
index 00000000000000..1263ec81cbbc3f
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/0003-Remove-libwhoopsie-dependency.patch
@@ -0,0 +1,49 @@
+From 3d4d2927e2d4eb93ca0069fb91bcb047ad8f06ae Mon Sep 17 00:00:00 2001
+From: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
+Date: Sat, 26 Nov 2016 18:48:03 -0500
+Subject: [PATCH 3/3] Remove libwhoopsie dependency
+
+---
+ CMakeLists.txt | 3 +--
+ src/service.c  | 4 ----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c0be0c..87ab985 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -29,8 +29,7 @@ find_package (PkgConfig REQUIRED)
+ include (FindPkgConfig)
+ pkg_check_modules (SERVICE REQUIRED
+                    glib-2.0>=2.36
+-                   gio-unix-2.0>=2.36
+-                   libwhoopsie)
++                   gio-unix-2.0>=2.36)
+ include_directories(SYSTEM ${SERVICE_INCLUDE_DIRS})
+ 
+ set (CC_WARNING_ARGS " -Wall -pedantic -Wextra -Wno-missing-field-initializers")
+diff --git a/src/service.c b/src/service.c
+index 96790a4..d39ff50 100644
+--- a/src/service.c
++++ b/src/service.c
+@@ -20,8 +20,6 @@
+ #include <glib/gi18n.h>
+ #include <gio/gio.h>
+ 
+-#include <libwhoopsie/recoverable-problem.h>
+-
+ #include "backend.h"
+ #include "service.h"
+ 
+@@ -648,8 +646,6 @@ report_unusable_user (IndicatorSessionService * self, const IndicatorSessionUser
+         NULL
+     };
+ 
+-    whoopsie_report_recoverable_problem("indicator-session-unknown-user-error", 0, FALSE, properties);
+-
+     /* mark it as reported so that we'll only report it once */
+     g_hash_table_add (p->reported_users, key);
+ 
+-- 
+2.10.2
+
diff --git a/srcpkgs/indicator-session/patches/include-cstdint.patch b/srcpkgs/indicator-session/patches/include-cstdint.patch
new file mode 100644
index 00000000000000..4970d3902615d5
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/include-cstdint.patch
@@ -0,0 +1,7 @@
+diff -p1ru a/tests/backend-dbus/mock-login1-seat.cc b/tests/backend-dbus/mock-login1-seat.cc
+--- a/tests/backend-dbus/mock-login1-seat.cc	2021-06-14 01:21:41.000000000 +0800
++++ b/tests/backend-dbus/mock-login1-seat.cc	2024-07-24 17:03:09.945000000 +0800
+@@ -23,2 +23,3 @@
+ #include "mock-user.h"
++#include <cstdint>
+ 
diff --git a/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..af0301d1c67944
--- /dev/null
+++ b/srcpkgs/indicator-session/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/src/service.c b/src/service.c
+--- a/src/service.c	2021-06-14 01:21:46.000000000 +0800
++++ b/src/service.c	2024-07-31 07:25:39.775044662 +0800
+@@ -902,3 +902,3 @@ create_menu (IndicatorSessionService * s
+   header = g_menu_item_new (NULL, "indicator._header");
+-  g_menu_item_set_attribute (header, "x-canonical-type", "s", "com.canonical.indicator.root");
++  g_menu_item_set_attribute (header, "x-ayatana-type", "s", "org.ayatana.indicator.root");
+   g_menu_item_set_submenu (header, G_MENU_MODEL (submenu));
diff --git a/srcpkgs/indicator-session/template b/srcpkgs/indicator-session/template
new file mode 100644
index 00000000000000..93aa04b7be0e4c
--- /dev/null
+++ b/srcpkgs/indicator-session/template
@@ -0,0 +1,26 @@
+# Template file for 'indicator-session'
+pkgname=indicator-session
+version=17.3.20+21.10.20210613.1
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib \
+ -Denable_tests=OFF -Denable_lcov=OFF"
+hostmakedepends="cmake-extras gtest-devel glib-devel intltool pkg-config
+ python"
+depends="gnome-settings-daemon"
+checkdepends="dbus"
+short_desc="Indicator showing session management, status and user switching"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-session"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-session_${version}.orig.tar.gz"
+checksum=f9da6a2f080e67944a71eebb744c3d9f5d7d532428e072c4a3a0fbb0b3bb6ae9
+make_check=ci-skip # ServiceTest.OnlineAccountError and ServiceTest.User fail
+
+post_install() {
+	rm -vf "${DESTDIR}/test-service"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	vsv indicator-session
+}
diff --git a/srcpkgs/indicator-sound/files/indicator-sound/run b/srcpkgs/indicator-sound/files/indicator-sound/run
new file mode 100644
index 00000000000000..4f3afd153ac217
--- /dev/null
+++ b/srcpkgs/indicator-sound/files/indicator-sound/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
new file mode 100644
index 00000000000000..f269a6e6b0c679
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-ido-type.patch
@@ -0,0 +1,21 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2018-06-13 04:42:13.000000000 +0800
++++ b/src/sound-menu.vala	2024-08-08 12:28:25.462427836 +0800
+@@ -459,3 +459,3 @@ public class SoundMenu: Object
+ 		var slider = new MenuItem (label, action);
+-		slider.set_attribute ("x-canonical-type", "s", "com.canonical.unity.slider");
++		slider.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.slider");
+ 		slider.set_attribute_value ("min-icon", min_icon.serialize ());
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2018-06-13 04:42:13.000000000 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-08 12:29:03.730284327 +0800
+@@ -409,3 +409,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-volume-high-panel", "audio-volume-high", "audio-volume", "audio"})
+@@ -423,3 +423,3 @@ unity::gmenuharness::MenuItemMatcher Ind
+             .double_attribute("step", 0.01)
+-            .string_attribute("x-canonical-type", "com.canonical.unity.slider")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.slider")
+             .themed_icon("max-icon", {"audio-input-microphone-high-panel", "audio-input-microphone-high", "audio-input-microphone", "audio-input", "audio"})
diff --git a/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
new file mode 100644
index 00000000000000..a9c01063c3e92e
--- /dev/null
+++ b/srcpkgs/indicator-sound/patches/use-ayatana-indicator-type.patch
@@ -0,0 +1,232 @@
+diff -p1ru a/src/sound-menu.vala b/src/sound-menu.vala
+--- a/src/sound-menu.vala	2024-08-01 19:20:13.325622721 +0800
++++ b/src/sound-menu.vala	2024-08-01 19:41:24.660288358 +0800
+@@ -69,3 +69,3 @@ public class SoundMenu: Object
+ 		var root_item = new MenuItem (null, "indicator.root");
+-		root_item.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
++		root_item.set_attribute ("x-ayatana-type", "s", "org.ayatana.indicator.root");
+ 		root_item.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+diff -p1ru a/tests/indicator-test.cc b/tests/indicator-test.cc
+--- a/tests/indicator-test.cc	2024-08-01 19:20:13.328624221 +0800
++++ b/tests/indicator-test.cc	2024-08-01 19:42:30.131536348 +0800
+@@ -70,3 +70,3 @@ TEST_F(IndicatorTest, DISABLED_PhoneMenu
+ 	EXPECT_EVENTUALLY_MENU_ATTRIB(std::vector<int>({0}), "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+@@ -85,3 +85,3 @@ TEST_F(IndicatorTest, DISABLED_DesktopMe
+ 	EXPECT_MENU_ATTRIB({0}, "action", "indicator.root");
+-	EXPECT_MENU_ATTRIB({0}, "x-canonical-type", "com.canonical.indicator.root");
++	EXPECT_MENU_ATTRIB({0}, "x-ayatana-type", "org.ayatana.indicator.root");
+ 	EXPECT_MENU_ATTRIB({0}, "x-canonical-scroll-action", "indicator.scroll");
+diff -p1ru a/tests/integration/indicator-sound-test-base.cpp b/tests/integration/indicator-sound-test-base.cpp
+--- a/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:20:13.329624721 +0800
++++ b/tests/integration/indicator-sound-test-base.cpp	2024-08-01 19:43:45.868648838 +0800
+@@ -918,3 +918,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -943,3 +943,3 @@ void IndicatorSoundTestBase::checkPortDe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+diff -p1ru a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
+--- a/tests/integration/test-indicator.cpp	2024-08-01 19:20:13.330625221 +0800
++++ b/tests/integration/test-indicator.cpp	2024-08-01 19:45:12.934094329 +0800
+@@ -53,3 +53,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChec
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -113,3 +113,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -136,3 +136,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -162,3 +162,3 @@ TEST_F(TestIndicator, DISABLED_PhoneTest
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -198,3 +198,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -219,3 +219,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -241,3 +241,3 @@ TEST_F(TestIndicator, DISABLED_DesktopTe
+                .action("indicator.root")
+-               .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++               .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -303,3 +303,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -320,3 +320,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -345,3 +345,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -362,3 +362,3 @@ TEST_F(TestIndicator, DISABLED_PhoneChan
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -390,3 +390,3 @@ TEST_F(TestIndicator, DISABLED_PhoneBasi
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -425,3 +425,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -455,3 +455,3 @@ TEST_F(TestIndicator, DISABLED_PhoneAddM
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -509,3 +509,3 @@ TEST_F(TestIndicator, DISABLED_DesktopBa
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -563,3 +563,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -600,3 +600,3 @@ TEST_F(TestIndicator, DISABLED_DesktopAd
+                 .action("indicator.root")
+-                .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++                .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+                 .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -652,3 +652,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -690,3 +690,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -743,3 +743,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -811,3 +811,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -872,3 +872,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -928,3 +928,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -984,3 +984,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1040,3 +1040,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1111,3 +1111,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1171,3 +1171,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1242,3 +1242,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1280,3 +1280,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1319,3 +1319,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1357,3 +1357,3 @@ TEST_F(TestIndicator, DISABLED_DesktopMp
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1429,3 +1429,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1446,3 +1446,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1467,3 +1467,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1484,3 +1484,3 @@ TEST_F(TestIndicator, DISABLED_DesktopCh
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-secondary-action", "indicator.mute")
+@@ -1516,3 +1516,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1647,3 +1647,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1690,3 +1690,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
+@@ -1730,3 +1730,3 @@ TEST_F(TestIndicator, DISABLED_PhoneNoti
+             .action("indicator.root")
+-            .string_attribute("x-canonical-type", "com.canonical.indicator.root")
++            .string_attribute("x-ayatana-type", "org.ayatana.indicator.root")
+             .string_attribute("x-canonical-scroll-action", "indicator.scroll")
diff --git a/srcpkgs/indicator-sound/template b/srcpkgs/indicator-sound/template
new file mode 100644
index 00000000000000..d35d0b393e30de
--- /dev/null
+++ b/srcpkgs/indicator-sound/template
@@ -0,0 +1,42 @@
+# Template file for 'indicator-sound'
+pkgname=indicator-sound
+version=12.10.2+18.10.20180612
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib"
+hostmakedepends="cmake-extras gobject-introspection intltool pkg-config vala
+ wget"
+makedepends="accountsservice-devel libgee-devel libnotify-devel
+ pulseaudio-devel unity-api-devel"
+depends="dconf gsettings-ubuntu-schemas libxml2 qt5 unity-api
+ unity-control-center"
+short_desc="Unified sound menu"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/indicator-sound"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}.orig.tar.gz"
+checksum=d37f5db1a683be45a6f6e515603745183867edb984ca06905e121c7d3432dfc2
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	gunzip indicator-sound_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i indicator-sound_${version}-${_ubuntu_rel}.diff
+
+	sed -i \
+	-e "s/TEST REQUIRED/TEST QUIET/" \
+	-e "/enable_testing()/d" \
+	-e "/add_subdirectory(tests)/d" \
+	-e '/url-dispatcher-1>=${URL_DISPATCHER_1_REQUIRED_VERSION}/d' \
+	CMakeLists.txt
+	sed -i \
+	-e "/add_definitions(/a -DVALA_EXTERN=extern" \
+	-e "/--pkg=url-dispatcher/d" \
+	src/CMakeLists.txt
+	rm vapi/url-dispatcher.vapi
+}
+
+post_install() {
+	rm -v "${DESTDIR}"/usr/var/lib/polkit-1/localauthority/10-vendor.d/50-com.canonical.indicator.sound.AccountsService.pkla
+	vsv indicator-sound
+}
diff --git a/srcpkgs/libcolumbus-devel b/srcpkgs/libcolumbus-devel
new file mode 120000
index 00000000000000..359e2f78144a3f
--- /dev/null
+++ b/srcpkgs/libcolumbus-devel
@@ -0,0 +1 @@
+libcolumbus
\ No newline at end of file
diff --git a/srcpkgs/libcolumbus/template b/srcpkgs/libcolumbus/template
new file mode 100644
index 00000000000000..0015dfab0a31c6
--- /dev/null
+++ b/srcpkgs/libcolumbus/template
@@ -0,0 +1,26 @@
+# Template file for 'libcolumbus'
+pkgname=libcolumbus
+version=1.1.0+15.10.20150806
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=''"
+hostmakedepends="boost sparsehash"
+makedepends="icu-devel"
+short_desc="Small, fast, error tolerant matcher"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libcolumbus"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libcolumbus_${version}.orig.tar.gz"
+checksum=b57fc4a4d0a90b62273f11d5e9ccde0eb6cce9f220ca300631d95d115690eb79
+make_check=ci-skip # tests run before latinAccentedLetterGroups.txt can be installed
+
+libcolumbus-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision}"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libgeonames-devel b/srcpkgs/libgeonames-devel
new file mode 120000
index 00000000000000..7e92c9283f1f14
--- /dev/null
+++ b/srcpkgs/libgeonames-devel
@@ -0,0 +1 @@
+libgeonames
\ No newline at end of file
diff --git a/srcpkgs/libgeonames/template b/srcpkgs/libgeonames/template
new file mode 100644
index 00000000000000..71fa93fdd3acd4
--- /dev/null
+++ b/srcpkgs/libgeonames/template
@@ -0,0 +1,24 @@
+# Template file for 'libgeonames'
+pkgname=libgeonames
+version=0.3.1
+revision=1
+build_style=cmake
+configure_args="-DWANT_DOC=OFF"
+hostmakedepends="gtk-doc intltool pkg-config"
+makedepends="glib-devel"
+short_desc="Library for parsing a local copy of the geonames.org database"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://git.launchpad.net/~larsu/geonames"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/geonames_${version}.orig.tar.gz"
+checksum=02b95e1682a011deedde1bd706eb6483f291c77e88b74cecfa7489e4b7ce3f32
+
+libgeonames-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity-devel b/srcpkgs/libunity-devel
new file mode 120000
index 00000000000000..2f16abe48556c1
--- /dev/null
+++ b/srcpkgs/libunity-devel
@@ -0,0 +1 @@
+libunity
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc-devel b/srcpkgs/libunity-misc-devel
new file mode 120000
index 00000000000000..89a81ecd20c27e
--- /dev/null
+++ b/srcpkgs/libunity-misc-devel
@@ -0,0 +1 @@
+libunity-misc
\ No newline at end of file
diff --git a/srcpkgs/libunity-misc/patches/0001_autotools.patch b/srcpkgs/libunity-misc/patches/0001_autotools.patch
new file mode 100644
index 00000000000000..9b243240aad711
--- /dev/null
+++ b/srcpkgs/libunity-misc/patches/0001_autotools.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,7 +5,7 @@
+         [https://bugs.launchpad.net/avani])
+ AC_CONFIG_SRCDIR([unity-misc/na-tray.h])
+ 
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+ 
+ AM_INIT_AUTOMAKE([1.9])
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff --git a/srcpkgs/libunity-misc/template b/srcpkgs/libunity-misc/template
new file mode 100644
index 00000000000000..19614cf5202899
--- /dev/null
+++ b/srcpkgs/libunity-misc/template
@@ -0,0 +1,31 @@
+# Template file for 'libunity-misc'
+pkgname=libunity-misc
+version=4.0.5+14.04.20140115
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static"
+hostmakedepends="automake glib-devel gtk-doc pkg-config"
+makedepends="cairo-devel gtk+3-devel"
+short_desc="Misc. differently licensed stuff for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-2.1-only"
+homepage="https://launchpad.net/libunity-misc"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=197fd17077c3ceac219cbfbe3cfa511a17dd47a86c441c386c7bdec200d119b7
+CFLAGS="-Wno-error"
+
+pre_configure() {
+	gtkdocize
+	autoreconf -vfi
+}
+
+libunity-misc-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/libunity/patches/0001_autoconf.patch b/srcpkgs/libunity/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..6fd0dcd342a96e
--- /dev/null
+++ b/srcpkgs/libunity/patches/0001_autoconf.patch
@@ -0,0 +1,20 @@
+diff -Nru libunity-6.90.0daily12.12.05.orig/configure.ac libunity-6.90.0daily12.12.05/configure.ac
+--- libunity-6.90.0daily12.12.05.orig/configure.ac	2013-01-07 15:11:24.125114436 -0500
++++ libunity-6.90.0daily12.12.05/configure.ac	2013-01-07 15:16:04.223636051 -0500
+@@ -2,7 +2,7 @@
+ AC_INIT(libunity, 6.90.2)
+ 
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+ AM_MAINTAINER_MODE
+ 
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -57,7 +57,6 @@
+ ###################################################################
+ AC_ISC_POSIX
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+ AC_HEADER_STDC
+ AM_PROG_LIBTOOL
+ AM_PROG_VALAC([0.16.0])
diff --git a/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
new file mode 100644
index 00000000000000..6ee9f778413ec6
--- /dev/null
+++ b/srcpkgs/libunity/patches/libunity-ubuntu-patches.patch
@@ -0,0 +1,153 @@
+--- libunity-7.1.4+19.04.20190319.orig/extras/Makefile.am
++++ libunity-7.1.4+19.04.20190319/extras/Makefile.am
+@@ -24,6 +24,7 @@
+   --library unity-extras \
+   --internal-vapi=unity-extras-internal.vapi \
+   --internal-header=unity-extras-internal.h \
++  --shared-library=libunity-extras.so.9 \
+   --thread \
+   --use-header \
+   --vapidir $(top_srcdir)/vapi \
+@@ -82,7 +83,6 @@
+ 
+ libunity_extras_la_vala.stamp: $(libunity_extras_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_extras_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="UnityExtras" version="@GIR_VERSION@" c:prefix="UnityExtras" shared-library="libunity-extras.so.@LIBUNITY_LT_CURRENT@">/g' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/"Extras/"/g;s/"extras_/"/' UnityExtras-@GIR_VERSION@.gir
+ 	@sed -i -e 's/<parameter name="scope_creation_cb" transfer-ownership="none"/<parameter name="scope_creation_cb" transfer-ownership="none" scope="call"/' UnityExtras-@GIR_VERSION@.gir
+ 	@touch $@
+@@ -97,12 +97,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(extrasgir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_extra_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity-extras.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_extra_dlname)
++$(extrasgir_DATA): libunity_extras_la_vala.stamp
++$(typelib_DATA): $(extrasgir_DATA) libunity-extras.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/protocol/protocol-icon.vala
++++ libunity-7.1.4+19.04.20190319/protocol/protocol-icon.vala
+@@ -185,7 +185,7 @@
+   }
+ 
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
+   {
+     Variant? ret = null;
+     return ret;
+--- libunity-7.1.4+19.04.20190319.orig/src/Makefile.am
++++ libunity-7.1.4+19.04.20190319/src/Makefile.am
+@@ -75,6 +75,7 @@
+   --library unity \
+   --internal-vapi=unity-internal.vapi \
+   --internal-header=unity-internal.h \
++  --shared-library=libunity.so.9 \
+   --target-glib=2.32 \
+   --thread \
+   --use-header \
+@@ -135,21 +136,8 @@
+ 
+ $(libunity_la_GENERATED): libunity_la_vala.stamp
+ 
+-#
+-# The reason for the first 'sed' below is:
+-# https://bugzilla.gnome.org/show_bug.cgi?id=642576
+-#
+-# The second is there because forced cname in Vala is not properly propagated
+-# into the gir file. Need https://bugzilla.gnome.org/show_bug.cgi?id=681356
+-#
+-# And the third because we need to specify scope manually.
+-#
+ libunity_la_vala.stamp: $(libunity_la_VALASOURCES)
+ 	$(AM_V_GEN) $(VALAC) $(libunity_la_VALAFLAGS) $^
+-	@sed -i -e 's/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity">/<namespace name="Unity" version="@GIR_VERSION@" c:prefix="Unity" shared-library="libunity.so.@LIBUNITY_LT_CURRENT@">/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/emit_preview_ready/preview_ready/g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<parameter name="async_callback" transfer-ownership="none" /<parameter name="async_callback" transfer-ownership="none" scope="async" /g' Unity-@GIR_VERSION@.gir
+-	@sed -i -e 's/<record name="ScopeResult">/<record name="ScopeResult" c:type="UnityScopeResult" glib:type-name="UnityScopeResult" glib:get-type="unity_scope_result_get_type">/;s/<record name="SearchContext">/<record name="SearchContext" c:type="UnitySearchContext" glib:type-name="UnitySearchContext" glib:get-type="unity_search_context_get_type">/' Unity-@GIR_VERSION@.gir
+ 	@touch $@
+ 
+ BUILT_SOURCES += libunity_la_vala.stamp
+@@ -169,12 +157,19 @@
+ # Compile .typelib from .gir
+ ##
+ if HAVE_INTROSPECTION
+--include $(INTROSPECTION_MAKEFILE)
+-INTROSPECTION_GIRS =
+-INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
+-
+ typelibdir = $(libdir)/girepository-1.0
+ typelib_DATA = $(unitygir_DATA:.gir=.typelib)
+ 
++# Extract dlname from libunity.la
++# This is what g-ir-scanner does.
++libunity_dlname = \
++	`$(SED) -nE "s/^dlname='([A-Za-z0-9.+-]+)'/\1/p" libunity.la`
++INTROSPECTION_COMPILER_ARGS= \
++	--includedir=$(srcdir) \
++	-l $(libunity_dlname)
++$(unitygir_DATA): libunity_la_vala.stamp
++$(typelib_DATA): $(unitygir_DATA) libunity.la
++	@INTROSPECTION_COMPILER@ $(INTROSPECTION_COMPILER_ARGS) -o $@ $^
++
+ CLEANFILES += $(typelib_DATA)
+ endif
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-aggregator-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-aggregator-scope.vala
+@@ -51,7 +51,7 @@
+    */
+   public abstract int category_index_for_scope_id (string scope_id);
+ 
+-  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
++  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
+   {
+     Object (dbus_path: dbus_path_, id: id_, is_master: true,
+             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-deprecated-scope.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-deprecated-scope.vala
+@@ -61,7 +61,7 @@
+   internal CategorySet _categories;
+   internal FilterSet _filters;
+    
+-  public DeprecatedScopeBase (string dbus_path_, string id_)
++  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   {
+     Object (dbus_path: dbus_path_, id: id_);
+   }
+--- libunity-7.1.4+19.04.20190319.orig/src/unity-scope-channel.vala
++++ libunity-7.1.4+19.04.20190319/src/unity-scope-channel.vala
+@@ -312,7 +312,7 @@
+           DBusSignalFlags.NONE, this.owner_changed);
+     }
+ 
+-    private void owner_changed (DBusConnection con, string sender_name,
++    private void owner_changed (DBusConnection con, string? sender_name,
+                                 string obj_path, string ifc_name,
+                                 string sig_name, Variant parameters)
+     {
+--- libunity-7.1.4+19.04.20190319.orig/tools/preview-renderer.vala
++++ libunity-7.1.4+19.04.20190319/tools/preview-renderer.vala
+@@ -63,7 +63,7 @@
+      */
+     public abstract class GridRenderer: PreviewRenderer
+     {
+-        public GridRenderer()
++        protected GridRenderer()
+         {
+             Object();
+         }
diff --git a/srcpkgs/libunity/template b/srcpkgs/libunity/template
new file mode 100644
index 00000000000000..d9f1274c56b053
--- /dev/null
+++ b/srcpkgs/libunity/template
@@ -0,0 +1,47 @@
+# Template file for 'libunity'
+pkgname=libunity
+version=7.1.4+19.04.20190319
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --disable-static --enable-headless-tests \
+ PYTHON=python2"
+hostmakedepends="automake gettext-devel glib-devel gobject-introspection
+ intltool pkg-config python vala"
+makedepends="dee-devel gtk+3-devel libdbusmenu-glib-devel"
+short_desc="Library for integrating with all aspects of the Unity shell"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/libunity"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/libunity_${version}.orig.tar.gz"
+checksum=56ecb380d74bf74caba193d9e8ad6b0c85ccf9eeb461bc9731c2b8636e1f1492
+make_check=ci-skip # "undefined reference" errors
+
+pre_patch() {
+	find -type f -name '*.py' -exec sed -i 's|^\(#!.*python$\)|\12|g' {} \+
+}
+
+post_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		msg "Applying ${i} ..."
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	intltoolize -f
+	autoreconf -vfi
+}
+
+libunity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel
+	 libdbusmenu-glib-devel libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove "usr/lib/libunity/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/gir-1.0
+		vmove usr/share/vala
+	}
+}
diff --git a/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
new file mode 100644
index 00000000000000..7732f396ca33ea
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/10-unity.defaults
@@ -0,0 +1,31 @@
+[org.gnome.desktop.background]
+show-desktop-icons=true
+picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.interface]
+gtk-theme="Ambiance"
+icon-theme="ubuntu-mono-dark"
+#cursor-theme="DMZ-White"
+font-name="Ubuntu 11"
+monospace-font-name="Ubuntu Mono 13"
+
+[org.gnome.desktop.sound]
+theme-name = 'ubuntu'
+
+[org.gnome.desktop.session]
+session-name="ubuntu"
+
+[org.gnome.desktop.wm.preferences]
+button-layout='close,minimize,maximize:'
+mouse-button-modifier='<Alt>'
+theme="Ambiance"
+titlebar-font='Ubuntu Bold 11'
+
+[org.gnome.nautilus.desktop]
+home-icon-visible=false
+trash-icon-visible=false
+volumes-visible=false
+
+[org.gnome.settings-daemon.plugins.xsettings]
+antialiasing = 'rgba'
+hinting = 'slight'
diff --git a/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
new file mode 100644
index 00000000000000..1c1b5a344662cf
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/50-unity-greeter.rules
@@ -0,0 +1,98 @@
+/* Original:
+ * [Disable Controlling of Network Devices]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.enable-disable-network" ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wifi"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wwan"    ||
+      action.id == "org.freedesktop.NetworkManager.enable-disable-wimax")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Sleep and Wake]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.sleep-wake
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.sleep-wake") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable WiFi Sharing]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.wifi.share.protected" ||
+      action.id == "org.freedesktop.NetworkManager.wifi.share.open")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable Settings Modifications]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" && (
+      action.id == "org.freedesktop.NetworkManager.settings.modify.own"    ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.system" ||
+      action.id == "org.freedesktop.NetworkManager.settings.modify.hostname")) {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Disable User Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.use-user-connections
+ * ResultActive=no
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      action.id == "org.freedesktop.NetworkManager.use-user-connections") {
+    return polkit.Result.NO;
+  }
+});
+
+/* Original:
+ * [Enable Controlling of Network Connections]
+ * Identity=unix-user:lightdm
+ * Action=org.freedesktop.NetworkManager.network-control
+ * ResultActive=yes
+ * ResultInactive=no
+ * ResultsAny=no
+ */
+polkit.addRule(function(action, subject) {
+  if (subject.user == "lightdm" &&
+      subject.local &&
+      subject.active &&
+      action.id == "org.freedesktop.NetworkManager.network-control") {
+    return polkit.Result.YES;
+  }
+});
diff --git a/srcpkgs/lightdm-unity-greeter/files/logo.png b/srcpkgs/lightdm-unity-greeter/files/logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..a589b42ead9432ea60c6ca3ae0a031733ce79055
GIT binary patch
literal 3264
zcmV;x3_tUUP)<h;3K|Lk000e1NJLTq008v>002-31^@s6!C*5u00009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H13{6Qy
zK~#90?VWp+Rdp4|KQjo51fqbCl!rnnYEt;h@~!1t^O4cRSDCL;GEHfT%Uq#ZnW&|v
zt~64jNKFwnHS_%jHEj@O6ciK`5mA%JFthvPd+uVm&OMKN&$;K!to>Q*w`S(t-(%0f
zKKu9Bd;c2D499W04vl#W;5bgYxKcY#7sHj>ak?0;)Q;1|SSxP<s-Q2hJunK`8W;==
z1o{CzfL_4IzzX1f;4NSd&<somo(7iIU24av6AhhY_j?p@7;pem=vrnNZ9o%nCvZDb
z^iJ_daGW?4S*iO0Cj!SJi<}j&1J?sL0`Fuvj^osYA}aMD;B4S~XewPVRsw$p#shEE
zaa_kql_Dwidce<sF~B-G%CQnz?(=~qIm+QURZ$eBJ`%VZ*f4KF+VL*%Q{X0i&Fyp|
zilEe&0cYkdL<o1FrNH}n3*tC&D1uTC10Do6%Uh5T<^kUXp3GYi$BCi{&L_>lZou4}
z<p^USdhvWaZ$TU<iXtdANTI(9%+FblFxE!v>mTPWh~tD&6s3mFVX+&53BWmd3*tDH
zD8ib$oH%Q216~211)c$B0*ldR*2hTs`T?5&TLQZRyCav<G%(;4;JTFhbDY#DqEbU;
z#eM~t6qMJi=ywn>8aNr)q80&xRmg4iUp4mQIH^)prG_;XdpdFk`DaRfHv;>ibLhQl
z=w}JAGcY?1p&Ta-vR3LIXbN1d+vPA|JK!H==KwMq_$~0+D%;Nhb^%&algM#uAnT2?
zvB0BLKh<ppZX;WduD=2!sD6FCJ#ayK;y6xiWNE3lMOLf_a^BdJ>ej*a<TT(4lE<01
z0y_fFr!JA>BqS@PZU7zwzTECvXHo2ZfLl?3NfI6f_Q3tbot(*P`h5s%Dm2I|>mh32
zb<UaxP(p?k3ES-k9G$*6j+2ZmEOi5#hK{W8`8>4a{94)rr_9m7WRku3UPjA~woD{)
zoET(bsgIztLc?l5>Y`ihDZsddZAKs~?>M=Ug{6J~*gHnO&alSr20V_=qT}*7@?dkE
zTu57~hXb?F6g&>IfvqU^baflFi@$b)Hd`U@H^-?vX-~huPke<2m`b_|-3v|Y`={7v
z6L4w5HpizpzT+e!ZA(211yID{17Ik%WfWNpB`^3ourJC9USbJ4W||U|T0Fk`Bd@r1
zW7cm5K3Btdj#D*hTIylMS7=a5-dYs;2=o%U890hH6&hfD;Lzan*}&m7jP)KcF+u%d
zxKcYgk>(8@UjW`Fo)5JF*VZuBvA`L~+Rq57HvsLn4@T~$SD|dBtyPRU0oW-){m<ip
z9!?HqvHN{E^2iEXTR#naDeZwP&<kZN{Uv(gOaxBAJ-?hTN|Nb!Gg5@G@)lah-X77{
z-4&jX0-g%`ni@RoixLvt1uQ@tYf*BP%5vadlt5u;<nVGFvep29iD-XpQ199VV}_N*
zXgQEpvIfWbG-ejJjI((B#>}=cvsEE=b}H+8Ei*gU%vPA$vf%r5&Fp+LTN-oRFxt%Q
z7&F@|`1uMm+tSQhL)t7hvtDL4$jn+&kfA*b%xqJO|F`$zC3Z<N{q708N^~mU<!F=W
zV&Iq#K3@g&4(fr9pe7=RjsFI1K0wyKl4sh>=!%^78*M#+Q>lFK)*@h2;5p>=H5T|m
z$nP;8C1$u3I4h*yEx`R{&jzB|K<|)tR{=i?`P^};BFXf78E{dIdg~yC`8gdQBh5w%
z-2j{fyoiE7t^{^Km()E(Wrcna#W2rCJKUx6AmK6515m<+^MH?l?}pS}iEa$(gD&Z-
zL<{hfpuhIATns!C(hhV4=Q!z;(6o0mvzZpnN;BKS%&sYW{+gM6#mqJ~vuVMzIcBzd
z(En%5?75JBmzk!m6Uv^qn%O`zyE#Ixy@PQsh^TjCQ18r$dXvp;6VtMx#7xuQ>8*&i
z3#|ZCH7{MSBt55YC0>?~?kE^yJhJeHtmsIz1Kk81gz{)_$7-wg3*d_({r&-2&oj!N
zPXqpk&aT6F8@YR)5>c;|D4~3uawY&jL{t9~*8%$zeYCeA;&aETjw;>+4QBR)MYGDx
zMwm9e4m7jAw%U@uV`hhy^}CUoEf49h#mokq*$o|hwuhOGjgV(SAp40C_3jVkIXa@=
zV`kRV%oeqK_JNu8F|&Ik+M1bNX$5$zd+B<m+J?JZJSGSA_qWy4(YsAk*7812kLYWP
zY1&?{_|KYI4>Ow|(SE#1shc9|9T>>-R7AZa&Fti|XTLVHZB4uFVYHdqNGrg9054sy
z)YAAKi>B4gZVA3$YG%iW^fxJ@uYJwzybhl4Z)T@Pw0+0S);F^QBI?aDvqm%9HKN`e
z(=lB8{e^|W7`H~WH8Z=(3h<BbrE8X2e80~nI>M?Ed2>C9cC2SnIpS%9kbV{e{|3HQ
z_WXCqJ1s1kK^uyiT7q_}!?-M{A9c0v73l7-5y8(b=z@T4iS{v{gWt#HWJoQ(-!CGM
ztgxe@7IeIG2|7v|i_Vxk;@yyb<^^9bZ1-#~dP&?y<xQ#5^*Hw+h1(}&j74bUZYbf|
zOFjf{2<nw`l1)dOgAWt#9=iZI5WS=vClhK7=r|wv1|265XhM!8%TZ?0?Stn-kph&T
zVNYYVTV^>Uf$P!Pv?0aW3ne(L<P5VAS?HN4gUQ*1E8I0`r+!ROzY=qhlS_&2z`^M6
z&@-gnbQDci?ZpO;6OR<;@R!?~w3*y6*D<p(X7-7FnjJdmr_s!&c2GAd%S=1u8=Bdk
zW_GP<XMI^no8_iWxb@BKqZDLl&wMjG%gnl40oGeyx_(I`^ztI$Yrw|Hjr45bO%#Ap
zDOcGZ$a1x(4XwXVM~M#x5if;M8*&$IM(gfBA?x`o6ufa9vgpf#QjQ_-v4!Xgo))zJ
zu9g)j{`v(Jtu_t0#yU=2NIUehCz|qJf}BJuk#=&vM&v_23MuA6tab>Qf|da*Qyedf
z9_aUfua09n4v?-=pNw{e<676vkws5RBl2oHz1_2($mhHgE0M?9)j`{8k|b=6_6Fk6
z2d%rWuVNg>sfjc*pFBeRjGK+<-m0-xjMIh`^CdJR7#gF^{9vrVS213R(@?NRT++IB
z*Krb&_Vjx$@e=^N4-7#OPSw&K9V;D%*6;n=eO5Z#zJuBm4-P;H7Q#X)+w&6gX?L8u
zlXi;WB$jXk;G7!AYXK%9#qN(%7i}JV?H@d!MD2G+k0ZW9gU-$!Cl}JT)Z3s$2XXlX
ztyPPBcH4-~$KzfTRLg#W<J3&rmbwXeCPDpmfj^S$0)Tqc2JDB{<#D(VS7;|kvbZ2G
z>1`JK5S}im2s9%Pwm6D?b;hzdPAFNV2=0blGlwT=(~35`?n+yjlo^83CJm|Z`3zu3
zJpHhfBUxDLR+Pac3Efa|NWF4_SIb-!omI(VkHZz($(bxHHE50eIIv5?c1uwd(-Wyn
zlrF=N#cm%=@(`M$J5H`-VW~mZY7EJ5v|JC}Z#_D7iPEKfjlG=cyl0M67qU`nfM-d*
zX$ErloQ(2%_excwbZG{5LsRk#@%yNqf{@kpyTsZkGfAZ!-ch`YvXE4|rl(dKP>k~o
z;Poo|7>uqP@<=SF5M*hoL1Boa(OS70hNB(v`$&JidN8`JV+vXi$8|0#=M7w;odS`y
zr7m#*a3|pzMdI*0N;&j5l*2nI!-4Mvr92R19<V3XTWrTE1ocvCP}2L~r_`6Bv+#$3
z{~$NcdBDeLcF-I7mJdK~s5_za<EV?^-$XM4S8S)#QctA@Wzn2a&jG7o9#ZVr@)pE#
zsv+w&bvc)#$gCneXbeOlo7Jwd9Vb`nZK+Efg^sMkvTx>%TWqIOl9y70a+FOb`o8Nt
z@in&7>8SVgyFHJg8!o5iC_@y3Q0_Iy=``f2)SzsehoTImi}DraQ@o8L$Ii`L5XVVE
z-bxMHG@A%)g<_HGnaZ~#K0)_tZwXAzSr*4hOrC4%N(@0EjK{F%W$sz?Axh~x0l9rT
zPN$@ZN?l?j-~`|#l=CYqUO+R28>!x%)o}_#k(Ihc1F!>H-yVW)udHR+&<Z?-@^Vi_
zw|6>Dm!UH#bvb>2ospssMNT4{0ew-}W^d#!x*To9%|l01O(+`cd1}iw?l^^}Gb**?
yI3W~a_uFxt6mg|?oGykdwc~U#T&W$Wi}8Qgcp_iwtHz@M0000<MNUMnLSTZycO^^!

literal 0
HcmV?d00001

diff --git a/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
new file mode 100755
index 00000000000000..f7233156195a8d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/files/unity-greeter-indicators-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Load each indicator in turn respecting unity-greeter's dconf setting #
+#  This is necessary since starting indicators via dbus has been deprecated in favour of using 'upstart' init system services #
+for indicator in $(gsettings get com.canonical.unity-greeter indicators | \
+				sed "s/,/\\n/g; s/[]\[']//g" | grep com.canonical | \
+					sed "s/com.canonical.//g; s/\./-/g"); do
+	if [ -x /usr/lib/${indicator}/${indicator}-service ]; then
+		exec /usr/lib/${indicator}/${indicator}-service &
+	fi
+done
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..37422bb1e6cab9
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-ayatana-libraries.patch
@@ -0,0 +1,114 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-06-08 15:31:11.000000000 +0800
++++ b/configure.ac	2024-07-26 14:26:21.642227245 +0800
+@@ -22,4 +22,4 @@ PKG_CHECK_MODULES(UNITY_GREETER, [
+     gdk-x11-3.0
+-    indicator3-0.4
+-    libido3-0.1 >= 13.10.0
++    ayatana-indicator3-0.4
++    libayatana-ido3-0.4
+     liblightdm-gobject-1 >= 1.12.0
+@@ -35,3 +35,3 @@ AC_DEFINE_UNQUOTED([INDICATOR_FILE_DIR],
+ 
+-INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4`
++INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4`
+ AC_SUBST(INDICATORDIR)
+diff -p1ru a/src/indicator.vapi b/src/indicator.vapi
+--- a/src/indicator.vapi	2023-06-08 15:31:11.000000000 +0800
++++ b/src/indicator.vapi	2024-07-26 14:35:23.122353248 +0800
+@@ -2,3 +2,3 @@
+ namespace Indicator {
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class DesktopShortcuts : GLib.Object {
+@@ -13,3 +13,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-object.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-object.h")]
+ 	public class Object : GLib.Object {
+@@ -58,3 +58,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "libindicator/indicator-ng.h")]
++	[CCode (cheader_filename = "libayatana-indicator/indicator-ng.h")]
+ 	public class Ng : Object {
+@@ -64,3 +64,3 @@ namespace Indicator {
+ 	[Compact]
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ObjectEntry {
+@@ -78,3 +78,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class Service : GLib.Object {
+@@ -96,3 +96,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public class ServiceManager : GLib.Object {
+@@ -116,3 +116,3 @@ namespace Indicator {
+ 	}
+-	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cprefix = "INDICATOR_OBJECT_SCROLL_", has_type_id = false, cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public enum ScrollDirection {
+@@ -123,37 +123,37 @@ namespace Indicator {
+ 	}
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate GLib.Type get_type_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h", has_target = false)]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h", has_target = false)]
+ 	public delegate unowned string get_version_t ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_TYPE_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string GET_VERSION_S;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_ADDED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_MOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_REMOVED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_ENTRY_SCROLLED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_MENU_SHOW;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string OBJECT_SIGNAL_SHOW_NOW_CHANGED;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string SERVICE_SIGNAL_SHUTDOWN;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const int SET_VERSION;
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public const string VERSION;
+-	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cname = "get_version", cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned string get_version ();
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static unowned Gtk.Image image_helper (string name);
+-	[CCode (cheader_filename = "gtk/gtk.h,libindicator/indicator.h,libindicator/indicator-desktop-shortcuts.h,libindicator/indicator-image-helper.h,libindicator/indicator-object.h,libindicator/indicator-service.h,libindicator/indicator-service-manager.h")]
++	[CCode (cheader_filename = "gtk/gtk.h,libayatana-indicator/indicator.h,libayatana-indicator/indicator-desktop-shortcuts.h,libayatana-indicator/indicator-image-helper.h,libayatana-indicator/indicator-object.h,libayatana-indicator/indicator-service.h,libayatana-indicator/indicator-service-manager.h")]
+ 	public static void image_helper_update (Gtk.Image image, string name);
+@@ -161,3 +161,3 @@ namespace Indicator {
+ 
+-[CCode (cheader_filename="libido/libido.h", lower_case_cprefix = "ido_")]
++[CCode (cheader_filename="libayatana-ido/libayatana-ido.h", lower_case_cprefix = "ido_")]
+ namespace Ido {
diff --git a/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
new file mode 100644
index 00000000000000..3d851d5a9694ac
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/patches/use-runit.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/src/unity-greeter.vala b/src/unity-greeter.vala
+--- a/src/unity-greeter.vala	2023-06-08 15:31:11.000000000 +0800
++++ b/src/unity-greeter.vala	2024-07-26 17:27:41.963293863 +0800
+@@ -644,3 +644,4 @@ public class UnityGreeter
+ 
+-                Shell.parse_argv ("systemctl --user start indicator-application indicator-power indicator-datetime indicator-keyboard indicator-session indicator-sound", out argv);
++                /* Missing indicators: application, keyboard */
++                Shell.parse_argv ("sv start indicator-power indicator-datetime indicator-session indicator-sound", out argv);
+                 Process.spawn_async (null,
diff --git a/srcpkgs/lightdm-unity-greeter/template b/srcpkgs/lightdm-unity-greeter/template
new file mode 100644
index 00000000000000..afe1360da9428d
--- /dev/null
+++ b/srcpkgs/lightdm-unity-greeter/template
@@ -0,0 +1,47 @@
+# Template file for 'lightdm-unity-greeter'
+pkgname=lightdm-unity-greeter
+version=23.10.1
+revision=1
+_ubuntu_rel=0ubuntu4
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin \
+ --libexecdir=/usr/lib/lightdm"
+hostmakedepends="automake gettext-devel ImageMagick intltool librsvg pkg-config
+ vala"
+makedepends="ayatana-ido-devel libayatana-indicator-devel libcanberra-devel
+ libXext-devel lightdm-devel unity-settings-daemon-devel"
+depends="cantarell-fonts lightdm network-manager-applet unity-settings-daemon"
+short_desc="Greeter application for Unity, implemented as a LightDM greeter"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-greeter"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname#*-}_${version}-${_ubuntu_rel}.tar.xz"
+checksum=dd6654ee535d7cfd4ae72765f0c4f7fd4c90d7e33a30efef4bbbe0587b30aec3
+make_check=ci-skip # Cannot convert from 'uint' to 'int'
+
+post_patch() {
+	rm data/logo.png
+	cp ${FILESDIR}/logo.png data/logo.png
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	vmkdir usr/share/polkit-1/rules.d 750
+	vinstall ${FILESDIR}/50-unity-greeter.rules 644 \
+	 usr/share/polkit-1/rules.d
+
+	vmkdir etc/guest-session/gsettings 755
+	vinstall ${FILESDIR}/10-unity.defaults 644 etc/guest-session/gsettings
+
+	vmkdir usr/share/lightdm/lightdm.conf.d 755
+	vinstall debian/50-unity-greeter.conf 644 \
+	usr/share/lightdm/lightdm.conf.d
+
+	vbin ${FILESDIR}/unity-greeter-indicators-start
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+}
diff --git a/srcpkgs/nux-devel b/srcpkgs/nux-devel
new file mode 120000
index 00000000000000..7ef0271615ba5b
--- /dev/null
+++ b/srcpkgs/nux-devel
@@ -0,0 +1 @@
+nux
\ No newline at end of file
diff --git a/srcpkgs/nux/files/50_check_unity_support b/srcpkgs/nux/files/50_check_unity_support
new file mode 100644
index 00000000000000..80f53103bfc279
--- /dev/null
+++ b/srcpkgs/nux/files/50_check_unity_support
@@ -0,0 +1,6 @@
+# If the hardware does not pass unity_support_test, fall back to LLVMpipe
+# which does.
+
+if [ "x$DESKTOP_SESSION" = "xubuntu" ]; then
+    /usr/lib/nux/unity_support_test || export LIBGL_ALWAYS_SOFTWARE=1
+fi
diff --git a/srcpkgs/nux/patches/0001_autoconf.patch b/srcpkgs/nux/patches/0001_autoconf.patch
new file mode 100644
index 00000000000000..8262af7f3b896f
--- /dev/null
+++ b/srcpkgs/nux/patches/0001_autoconf.patch
@@ -0,0 +1,12 @@
+diff -Nru nux-4.0.0daily12.12.05.orig/configure.ac nux-4.0.0daily12.12.05/configure.ac
+--- nux-4.0.0daily12.12.05.orig/configure.ac	2013-01-07 13:35:53.028194074 -0500
++++ nux-4.0.0daily12.12.05/configure.ac	2013-01-07 13:36:07.038120083 -0500
+@@ -60,7 +60,7 @@
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+ 
+ AC_CONFIG_SRCDIR([Makefile.am])
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([1.10])
+ 
+ NUX_MAJOR_VERSION=nux_major_version
diff --git a/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
new file mode 100644
index 00000000000000..9845ab8363e882
--- /dev/null
+++ b/srcpkgs/nux/patches/add_setupframebufferobject_clear.patch
@@ -0,0 +1,13 @@
+--- a/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:34:57.826292791 +0530
++++ b/NuxGraphics/IOpenGLFrameBufferObject.cpp	2022-11-09 20:44:30.187949413 +0530
+@@ -72,6 +72,10 @@
+     texture_attachment_array_.clear();
+     surface_attachment_array_.clear();
+ 
++    auto const& gpu_info = GetGraphicsDisplay()->GetGpuDevice()->GetGpuInfo();
++    texture_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++    surface_attachment_array_.resize(gpu_info.GetMaxFboAttachment());
++
+     depth_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+     stencil_surface_attachment_ = ObjectPtr<IOpenGLSurface> (0);
+ 
diff --git a/srcpkgs/nux/patches/use_glewmx.patch b/srcpkgs/nux/patches/use_glewmx.patch
new file mode 100644
index 00000000000000..67bbebd4e188d5
--- /dev/null
+++ b/srcpkgs/nux/patches/use_glewmx.patch
@@ -0,0 +1,35 @@
+--- a/NuxGraphics/FreetypeFont.cpp
++++ b/NuxGraphics/FreetypeFont.cpp
+@@ -27,7 +27,7 @@
+ //#include "OpenGL/GLsdk/GL/gl.h"
+ //#include "OpenGL/GLsdk/GL/glprocs.h"
+ //#include <GL/glu.h>
+-#include <GL/glew.h>
++#include <glew-1.13.0/GL/glew.h>
+ #include "GfxServer.h"
+ #include "OpenGLEngine/GLCheck.h"
+ #include "OpenGLEngine/OpenGLEngine.h"
+--- a/NuxGraphics/GLResource.h
++++ b/NuxGraphics/GLResource.h
+@@ -72,8 +72,8 @@ namespace nux
+ #define NUX_ENABLE_CG_SHADERS 0
+ 
+ #if defined(NUX_OS_WINDOWS)
+-  #include "GL/glew.h"
+-  #include "GL/wglew.h"
++  #include "GL/glewmx.h"
++  #include "GL/wglewmx.h"
+ 
+   GLEWContext *glewGetContext();
+   WGLEWContext *wglewGetContext();
+@@ -96,8 +96,8 @@ namespace nux
+     #ifndef GLEW_MX
+       #define GLEW_MX
+     #endif
+-    #include "GL/glew.h"
+-    #include "GL/glxew.h"
++    #include "GL/glewmx.h"
++    #include "GL/glxewmx.h"
+ 
+     GLEWContext *glewGetContext();
+     GLXEWContext *glxewGetContext();
diff --git a/srcpkgs/nux/template b/srcpkgs/nux/template
new file mode 100644
index 00000000000000..a74d34fd3ab048
--- /dev/null
+++ b/srcpkgs/nux/template
@@ -0,0 +1,59 @@
+# Template file for 'nux'
+pkgname=nux
+version=4.0.8+18.10.20180623
+revision=1
+_ubuntu_rel=0ubuntu10
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib --disable-static \
+ --disable-tests"
+hostmakedepends="automake boost-devel doxygen graphviz pkg-config wget
+ xorgproto"
+makedepends="gdk-pixbuf-devel geis-devel glew-devel glewmx-devel ibus-devel
+ libsigc++-devel libXcomposite-devel libXdamage-devel libXinerama-devel
+ libXxf86vm-devel pango-devel pciutils-devel pcre-devel"
+depends="glew"
+short_desc="OpenGL graphical user interface toolkit"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/nux"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}.orig.tar.gz"
+checksum=5ec296f8e9d445fc2e2bf2814e4fa6ed36a62068937d0a2e0122fa68492361b3
+keep_libtool_archives=yes
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/nux_${version}-${_ubuntu_rel}.diff.gz
+	gunzip nux_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i nux_${version}-${_ubuntu_rel}.diff
+
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+pre_configure() {
+	export CFLAGS+=" -Wno-error"
+	export CXXFLAGS+=" -Wno-error -g -O0"
+
+	autoreconf -vfi
+}
+
+
+post_install() {
+	vmkdir etc/X11/xinit/xinitrc.d 755
+	vinstall ${FILESDIR}/50_check_unity_support 755 \
+	 etc/X11/xinit/xinitrc.d/
+}
+
+nux-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} cairo-devel
+	 gdk-pixbuf-devel geis-devel glewmx-devel glu-devel libglib-devel
+	 libglvnd-devel libpng-devel libsigc++-devel libX11-devel libXext-devel
+	 libXinerama-devel libXxf86vm-devel pcre-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.la"
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/openrc-settingsd/files/openrc-settingsd/run b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
new file mode 100644
index 00000000000000..cfa502c3491a71
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/files/openrc-settingsd/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+exec 2>&1
+[ -r conf ] && . ./conf
+install -d -m0700 /run/openrc-settingsd
+exec /usr/libexec/openrc-settingsd ${OPTS} --syslog
+
diff --git a/srcpkgs/openrc-settingsd/template b/srcpkgs/openrc-settingsd/template
new file mode 100644
index 00000000000000..404e485cbfacda
--- /dev/null
+++ b/srcpkgs/openrc-settingsd/template
@@ -0,0 +1,19 @@
+# Template file for 'openrc-settingsd'
+pkgname=openrc-settingsd
+version=1.5.0
+revision=1
+build_style=meson
+configure_args="-Dopenrc=disabled"
+hostmakedepends="pkg-config"
+makedepends="glib-devel polkit-devel"
+depends="dbus"
+short_desc="Standalone hostnamed, localed, and timedated D-Bus services"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://gitlab.com/postmarketOS/openrc-settingsd"
+distfiles="https://gitlab.com/postmarketOS/openrc-settingsd/-/archive/v${version}/openrc-settingsd-v${version}.tar.gz"
+checksum=f4a74262e0012783047ec1d12dfdf4ef3a983e9abaeb436e17703d6881f72292
+
+post_install() {
+	vsv openrc-settingsd
+}
diff --git a/srcpkgs/properties-cpp/template b/srcpkgs/properties-cpp/template
new file mode 100644
index 00000000000000..af6531a7cd73ef
--- /dev/null
+++ b/srcpkgs/properties-cpp/template
@@ -0,0 +1,17 @@
+# Template file for 'properties-cpp'
+pkgname=properties-cpp
+version=0.0.3
+revision=1
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib"
+hostmakedepends="cmake-extras"
+short_desc="C++11 library providing properties/signals"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/properties-cpp"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/properties-cpp_${version}.orig.tar.gz"
+checksum=62730a43c15dfb8dd28beca8852d7b11f64a6db72f47953bee78b31b9d9b3069
+
+pre_configure() {
+	sed -i '/tests/d' CMakeLists.txt
+}
diff --git a/srcpkgs/session-shortcuts/template b/srcpkgs/session-shortcuts/template
new file mode 100644
index 00000000000000..b2e7d77b07cdec
--- /dev/null
+++ b/srcpkgs/session-shortcuts/template
@@ -0,0 +1,28 @@
+# Template file for 'session-shortcuts'
+pkgname=session-shortcuts
+version=1.4
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+#configure_args=""
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="gettext intltool"
+short_desc="Several .desktop files that allow you to shutdown, logout, and reboot"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://launchpad.net/session-shortcuts"
+changelog="https://git.launchpad.net/ubuntu/+source/session-shortcuts/plain/debian/changelog"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/session-shortcuts/${version}/session-shortcuts_${version}.tar.xz"
+checksum=5eba57bd704b24928b6dadfc524ceb4c4d53b2c8b6a92076dfa8a4a7d1c93bf0
+
+do_build() {
+	./build.sh
+}
+
+do_install() {
+	vmkdir usr/share/applications
+	vcopy "build/*" usr/share/applications
+}
diff --git a/srcpkgs/unity-api-devel b/srcpkgs/unity-api-devel
new file mode 120000
index 00000000000000..b67dfb4db11fc7
--- /dev/null
+++ b/srcpkgs/unity-api-devel
@@ -0,0 +1 @@
+unity-api
\ No newline at end of file
diff --git a/srcpkgs/unity-api/template b/srcpkgs/unity-api/template
new file mode 100644
index 00000000000000..52dc6d721d5dfe
--- /dev/null
+++ b/srcpkgs/unity-api/template
@@ -0,0 +1,36 @@
+# Template file for 'unity-api'
+pkgname=unity-api
+version=8.7+17.04.20170404
+revision=1
+_ubuntu_rel=0ubuntu9
+build_style=cmake
+configure_args="-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DNO_TESTS=TRUE"
+hostmakedepends="doxygen graphviz pkg-config python3 qt5 wget"
+makedepends="glib-devel"
+short_desc="API for Unity shell integration"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only, LGPL-3.0-only"
+homepage="https://launchpad.net/unity-api"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}.orig.tar.gz"
+checksum=5c17e5092e384c80382569f3beee282f522ff0ca6ad5d72690258f14abb759d9
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	gunzip ${pkgname}_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i ${pkgname}_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	export CFLAGS+=" -fpermissive"
+}
+
+unity-api-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} qt5-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-22.png
new file mode 100755
index 0000000000000000000000000000000000000000..e6e6c04ca4fb4d71dae69127b9ef6a62bd9e3e4f
GIT binary patch
literal 621
zcmV-z0+RiSP)<h;3K|Lk000e1NJLTq000&M000&U1^@s6#I$TX00009a7bBm0004t
z0004t0pZZnyZ`_I8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10s2Wq
zK~y-6ot3|9ltB=NpF1HrB`Q(0@Qi1E6!tbY7J|_-wHDD}qW^-4`0pqPQL$7+uo6U4
zY7@>tJTVEFs9;d!vH13IvbSf9FAVHAJNxeJyR-AvRQli`a0R#woCS^n0;|AV;0f>;
z_*`7A<~E?-QNOr5Hq`}nf6h}P9#Px>KpOE{ZAPA2A1PYE3t$x30A2#iz>nmcOwvTG
z0_T7aQHsHoY0SK(&X$g;?o+4LP9gI~l;W<sqK*|v{$?lCrHuS`m-vwSH96ZU)4h^^
z48)u2a2>b`3?-dT1D6V#j{~=ojb(EkU_N{w2BuIK!*1&ZO>d~%A?CX}Q_y@p#5_cO
z9~_I>g7J(rl8<Jw_rm<UI&eH3V>vtKBrsTzrU6{ceC;r9)`4Ha@iPnV``!z417TdN
zQ;FY2D+_)GY!^tkf#;cTB8=Bi9|djJ(nUn=W|F2+-)mXS0d*t9Jm@Zrn6|f8$JCq2
z@=HUV%Q)sxk60CT7agmj-^(Lu`KNJhsYBg~g>1*A{~$l5F01o~UeT~>AQ2t)y1klr
zHJ!Eh`Hxuj^Brxo3A_SMX1BeOs-vAsY63V998JCpz)DZuWIHwsneT?Sy)C!+2WeQf
zzRe=dPHb6eI*{}9`-1=s15?S)B#G+4C*Te66u1w3D=q#F?mbR!k9`FN00000NkvXX
Hu0mjfnNt-B

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png b/srcpkgs/unity-asset-pool/files/voidlinux-icon-tango-24.png
new file mode 100755
index 0000000000000000000000000000000000000000..86a177c16d2ec17169d95b1d049c7295dbfb1e54
GIT binary patch
literal 626
zcmV-&0*(ENP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm00055
z000550bW9u-T(jq8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10sl!v
zK~zYIos~Un6j2n0pB>piur;t|qu?J<@Pnk&UPyXd!7^>sUm_+Dw6RFFm_bOT2*%b(
z#3tZ3qD3%Wve`TqGb4BJ-WfOh!Y$6ZXU==ix#zyqQfa_>;0|yLxD1>F1ik^EfK8wW
ze67u(rdCINq8|Bw9II<;H<hc7U}KELF%HzlaS5i?tti31x})x@e`-hu>hd@Q6-ll>
zQm?A5U@ueW)yHZ-LGrJXu;)GXYy)B4x}xqS+BF*zJS{i2%9Ed#WF|qfS`o}TJT3VI
z1XU$ryN=blteo?9FuAFjo&p{Kugi76^o4i_tOxcPU<vhkRNA%ZWK-%}N3mV*g|Q1!
zOpf|FaO_)5NchpiMDhwNQEX;$!4*Dcz)Voq7vLl+{dTPkjP9KP-vhgw0fWHNW)zKL
zl|Y!Ul>t9OMj(qm$QzPvMs@~V4D8>iFQUHACoXwA(f>DUJBqy##q_eo3GYVs5pa{?
zF<mKr{V4WcWWPeaVDTs_^erCEB#$i*@*Jw2YGW-bZO`KQpOzq0;dKKo>N-5X70D!(
zOk4a<Iw1iT5<7@U`WBMB;P3;?)aw?4mfIkZv12(wQsF@TpuTtXhf}M<Db~eAyT-xB
zxCE7iuR1(kbvU%R&`v5>OB<D74p^eloJ*yh0l$D9;3e=3_*s|WFJN+<O|rQ(qyPW_
M07*qoM6N<$f}ngABme*a

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity-asset-pool/template b/srcpkgs/unity-asset-pool/template
new file mode 100644
index 00000000000000..81a80afb921f65
--- /dev/null
+++ b/srcpkgs/unity-asset-pool/template
@@ -0,0 +1,30 @@
+# Template file for 'unity-asset-pool'
+pkgname=unity-asset-pool
+version=0.8.24+17.10.20170507
+revision=1
+hostmakedepends="icon-naming-utils"
+depends="gnome-icon-theme"
+short_desc="Design assets for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="CC-BY-SA-3.0"
+homepage="https://launchpad.net/unity-asset-pool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-asset-pool_${version}.orig.tar.gz"
+checksum=8f3ff7df84daf28165e6f78d1287b54c86d22a1612f66c8655d8bef729a85b8b
+
+do_install() {
+	vmkdir usr/share/unity/themes 755
+	vcopy launcher/* usr/share/unity/themes
+	vcopy panel/* usr/share/unity/themes
+
+	vmkdir usr/share/icons 755
+	find unity-icon-theme/ -type f -exec install -Dm644 {} "${DESTDIR}"/usr/share/icons/{} \;
+	vinstall ${FILESDIR}/voidlinux-icon-tango-22.png 644 usr/share/icons/unity-icon-theme/places/22 distributor-logo.png
+	vinstall ${FILESDIR}/voidlinux-icon-tango-24.png 644 usr/share/icons/unity-icon-theme/places/24 distributor-logo.png
+
+	for i in $(find "${DESTDIR}/usr/share/icons" -mindepth 2 -maxdepth 2 -type d); do
+		cd "${i}"
+		for j in *; do
+			/usr/libexec/icon-name-mapping -c "${j}"
+		done
+	done
+}
diff --git a/srcpkgs/unity-backgrounds/template b/srcpkgs/unity-backgrounds/template
new file mode 100644
index 00000000000000..d6363b8ee8164b
--- /dev/null
+++ b/srcpkgs/unity-backgrounds/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-backgrounds'
+pkgname=unity-backgrounds
+version=24.04
+revision=1
+_ubuntu_rel=0ubuntu1
+short_desc="Unity backgrounds included in Ubuntu Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/ubuntu-unity-backgrounds_${version}-${_ubuntu_rel}_all.deb"
+checksum=5332b43cc91df70613813a636de62c354dfaae1421356fe64ed0fa9428468aab
+
+do_install() {
+	vcopy "*" usr
+}
diff --git a/srcpkgs/unity-control-center-devel b/srcpkgs/unity-control-center-devel
new file mode 120000
index 00000000000000..ee55ee3996e49d
--- /dev/null
+++ b/srcpkgs/unity-control-center-devel
@@ -0,0 +1 @@
+unity-control-center
\ No newline at end of file
diff --git a/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
new file mode 100644
index 00000000000000..f84903866093d2
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/system-config-printer-unity.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Name=Print Settings
+Name[ar]=إعدادات الطباعة
+Name[as]=প্ৰিন্ট সংহতিসমূহ
+Name[bg]=Принтерни настройки
+Name[bn_IN]=প্রিন্ট সংক্রান্ত বৈশিষ্ট্য
+Name[ca]=Paràmetres d'impressió
+Name[cs]=Nastavení tisku
+Name[da]=Udskriftsindstillinger
+Name[de]=Druckeinstellungen
+Name[el]=Εκτύπωση Ρυθμίσεων
+Name[en_GB]=Print Settings
+Name[es]=Configuración de impresión
+Name[et]=Trükkimise seaded
+Name[fi]=Tulostusasetukset
+Name[fr]=Configuration de l'impression
+Name[gu]=પ્રિન્ટ સુયોજનો
+Name[hi]=छपाई सेटिंग
+Name[hu]=Nyomtatási beállítások
+Name[it]=Impostazioni di stampa
+Name[ja]=印刷設定
+Name[kn]=ಮುದ್ರಣದ ಸಿದ್ಧತೆಗಳು
+Name[ko]=인쇄 설정
+Name[lv]=Drukāšanas iestatījumi
+Name[ml]=പ്രിന്റ് സജ്ജീകരണങ്ങള്‍
+Name[mr]=छपाई सेटिंग्स्
+Name[nb]=Innstillinger for utskrift
+Name[nl]=Afdrukinstellingen
+Name[or]=ମୂଦ୍ରଣୀ ସଂରଚନା
+Name[pa]=ਪਰਿੰਟ ਸੈਟਿੰਗ
+Name[pl]=Ustawienia drukowania
+Name[pt]=Configurações da Impressora
+Name[pt_BR]=Configurações da impressora
+Name[ru]=Настройки принтера
+Name[sl]=Nastavitve tiskanja
+Name[sv]=Skrivarinställningar
+Name[ta]=அச்சு அமைவுகள்
+Name[te]=ముద్రణ అమరికలు
+Name[uk]=Параметри друку
+Name[zh_CN]=打印设置
+Name[zh_TW]=列印設定值
+Comment=Configure printers
+Comment[ar]=اضبط الطابعات
+Comment[as]=মুদ্ৰকৰ বিন্যাস কৰক
+Comment[bg]=Настройка на принтерите
+Comment[bn]=প্রিন্টার কনফিগার করুন
+Comment[bn_IN]=প্রিন্টার কনফিগার করুন
+Comment[br]=Kefluniañ ar voullerezed
+Comment[bs]=Konfiguriranje pisača
+Comment[ca]=Configureu les impressores
+Comment[cs]=Nastavit tiskárny
+Comment[da]=Indstil printere
+Comment[de]=Drucker konfigurieren
+Comment[el]=Ρύθμιση εκτυπωτών
+Comment[en_GB]=Configure printers
+Comment[es]=Configurar impresoras
+Comment[et]=Printerite seadistamine
+Comment[fa]=پیکربندی چاپگرها
+Comment[fi]=Muokkaa tulostimien asetuksia
+Comment[fr]=Configurer les imprimantes
+Comment[gu]=પ્રિન્ટરો રૂપરેખાંકિત કરો
+Comment[he]=הגדרת מדפסות
+Comment[hi]=मुद्रक विन्यस्त करें
+Comment[hr]=Konfiguriranje pisača
+Comment[hu]=Nyomtatók beállítása
+Comment[id]=Konfigurasi pencetak
+Comment[is]=Stilla prentara
+Comment[it]=Configura le stampanti
+Comment[ja]=プリンターの設定
+Comment[kn]=ಮುದ್ರಕವನ್ನು ಸ್ವರೂಪಿಸು
+Comment[ko]=프린터 설정
+Comment[lv]=Konfigurēt printerus
+Comment[ml]=പ്രിന്‍ററുകള്‍ സജ്ജമാക്കുക
+Comment[mr]=मुद्रक व्यूहरचित करा
+Comment[ms]=Tetapkan pencetak
+Comment[nb]=Konfigurer skrivere
+Comment[nl]=Printers configureren
+Comment[nn]=Set opp skrivarar
+Comment[or]=ମୁଦ୍ରଣୀ ମାନଙ୍କୁ ବିନ୍ଯାସ କରନ୍ତୁ
+Comment[pa]=ਪਰਿੰਟਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja drukarek
+Comment[pt]=Configurar impressoras
+Comment[pt_BR]=Configure impressoras
+Comment[ro]=Configurează imprimantele
+Comment[ru]=Настроить принтеры
+Comment[si]=මුද්‍රකයන් මානකරන්න
+Comment[sk]=Konfigurovať tlačiarne
+Comment[sl]=Konfiguracija tiskalnikov
+Comment[sr]=Подешавање штампача
+Comment[sr@latin]=Podešavanje štampača
+Comment[sv]=Konfigurera skrivare
+Comment[ta]=அச்சடிப்பிகளை கட்டமைக்கவும்
+Comment[te]=ముద్రకాలను ఆకృతీకరించు
+Comment[th]=ตั้งค่าเครื่องพิมพ์
+Comment[tr]=Yazıcıları yapılandır
+Comment[uk]=Налаштовування принтерів
+Comment[vi]=Cấu hình máy in
+Comment[zh_CN]=配置打印机
+Comment[zh_TW]=設定印表機
+Exec=system-config-printer
+Terminal=false
+Type=Application
+Icon=printer
+StartupNotify=true
+OnlyShowIn=Unity;
+Categories=GNOME;GTK;Settings;HardwareSettings;X-Unity-Settings-Panel;
+X-Unity-Settings-Panel=printing
+Keywords=Printer;Queue;Print;Paper;Ink;Toner;
diff --git a/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
new file mode 100644
index 00000000000000..daf714e2d77993
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-online-accounts-panel.desktop
@@ -0,0 +1,197 @@
+[Desktop Entry]
+Name=Online Accounts
+Name[af]=Aanlynrekeninge
+Name[an]=Cuentas en linia
+Name[ar]=حسابات الإنترنت
+Name[as]=অনলাইন একাওন্টসমূহ
+Name[ast]=Cuentes en llinia
+Name[be]=Сеціўныя конты
+Name[bg]=Мрежови регистрации
+Name[bn_IN]=অনলাইন অ্যাকাউন্ট
+Name[ca]=Comptes en línia
+Name[ca@valencia]=Comptes en línia
+Name[crh]=Çevrimiçi Hesaplar
+Name[cs]=Účty on-line
+Name[da]=Onlinekonti
+Name[de]=Online-Konten
+Name[el]=Διαδικτυακοί λογαριασμοί
+Name[en_GB]=Online Accounts
+Name[eo]=Interretaj kontoj
+Name[es]=Cuentas en línea
+Name[et]=Netikontod
+Name[eu]=Lineako kontuak
+Name[fa]=حساب‌های برخط
+Name[fi]=Verkkotilit
+Name[fr]=Comptes en ligne
+Name[ga]=Cuntais ar Líne
+Name[gl]=Contas en liña
+Name[gu]=ઓનલાઇન ખાતાઓ
+Name[he]=חשבונות מקוונים
+Name[hi]=ऑनलाइन खातों
+Name[hu]=Online fiókok
+Name[id]=Akun Daring
+Name[it]=Account online
+Name[ja]=オンラインアカウント
+Name[kk]=Желідегі тіркелгілер
+Name[km]=គណនី​លើ​បណ្ដាញ
+Name[kn]=ಅಂತರಜಾಲದಲ್ಲಿನ ಖಾತೆಗಳು
+Name[ko]=온라인 계정
+Name[lt]=Interneto paslaugų paskyros
+Name[lv]=Tiešsaistes konti
+Name[mk]=Онлајн сметки
+Name[ml]=ഓണ്‍ലൈന്‍ അക്കൌണ്ടുകള്‍
+Name[mr]=ऑनलाइन खाते
+Name[nb]=Nettkontoer
+Name[ne]=अनलाईन खाताहरू
+Name[nl]=Online-accounts
+Name[nn]=Nettkontoar
+Name[or]=ଅନଲାଇନ ଖାତାଗୁଡ଼ିକ
+Name[pa]=ਆਨਲਾਈਨ ਅਕਾਊਂਟ
+Name[pl]=Konta online
+Name[pt]=Contas Online
+Name[pt_BR]=Contas on-line
+Name[ro]=Conturi online
+Name[ru]=Сетевые учётные записи
+Name[sk]=Účty služieb
+Name[sl]=Spletni računi
+Name[sr]=Налози на мрежи
+Name[sr@latin]=Nalozi na mreži
+Name[sv]=Nätkonton
+Name[ta]=ஆன் லைன்  கணக்குகள்
+Name[te]=ఆన్‌లైన్ ఖాతాలు
+Name[tg]=Ҳисобҳои онлайн
+Name[th]=บัญชีออนไลน์
+Name[tr]=Çevrimiçi Hesaplar
+Name[ug]=توردىكى ھېساباتلار
+Name[uk]=Мережеві облікові записи
+Name[vi]=Tài khoản trực tuyến
+Name[zh_CN]=在线账户
+Name[zh_HK]=網上帳號
+Name[zh_TW]=線上帳號
+Comment=Connect to your online accounts and decide what to use them for
+Comment[af]=Koppel met aanlynrekeninge en kies waarvoor hulle gebruik moet word
+Comment[an]=Connectar-se a las tuyas cuentas en linia y decidir ta qué usar-las
+Comment[ar]=اتصل بحساباتك على الإنترنت و اختر ما الذي تستخدمه منهم
+Comment[as]=আপোনাৰ অনলাইন একাওন্টসমূহৰ সৈতে সংযোগ কৰক আৰু সিহতক কিহৰ বাবে ব্যৱহাৰ কৰিব নিৰ্ধাৰণ কৰক
+Comment[be]=Злучэнне з сеціўнымі контамі і іх прызначэнне
+Comment[bg]=Свързване с онлайн регистрациите ви и задаване за какво да се ползват
+Comment[bn_IN]=অাপনার অনলাইন অ্যাকাউন্টগুলিতে সংযোগ করুন এবং তাদের কী কাজে ব্যবহার করবেন তার স্থির করুন
+Comment[ca]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[ca@valencia]=Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer
+Comment[cs]=Přihlaste se k účtům on-line a rozhodněte se, k čemu je používat
+Comment[da]=Forbind til dine onlinekonti og beslut dig for hvad du vil bruge dem til
+Comment[de]=Verbinden Sie sich mit Ihren Online-Konten und entscheiden Sie, wofür diese genutzt werden
+Comment[el]=Συνδεθείτε με τους δικτυακούς λογαριασμούς σαε και αποφασίστε πού θα τους χρησιμοποιήσετε
+Comment[en_GB]=Connect to your online accounts and decide what to use them for
+Comment[eo]=Konekti al viajn interretajn kontojn kaj elekti kiel uzi ilin
+Comment[es]=Conectarse a sus cuentas en línea y decidir para qué usarlas
+Comment[et]=Veebikontodega ühendumine ja määramine, milleks neid kasutatakse
+Comment[eu]=Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun 
+Comment[fa]=به حساب‌های برخط خود متصل شوید و تصمیم بگیرد چه استفاده‌ای از آنها بکنید
+Comment[fi]=Liitä verkkotilisi ja päätä, mihin tarkoituksiin niitä käytetään
+Comment[fr]=Connectez-vous à vos comptes en ligne et décidez de leur utilité
+Comment[gl]=Conéctese ás súas contas en liña a decida para que usalas
+Comment[gu]=તમારાં ઓનલાઇન ખાતામાં જોડાવો અને નક્કી કરો તે તેઓ માટે શું વાપરવુ છે
+Comment[he]=התחברות לחשבונות המקוונים שלך ולהחליט למה לשמש אותם
+Comment[hi]=आपके ऑनलाइन खातों से कनेक्ट करने और निर्णय क्या उनके लिए उपयोग करने के लिए
+Comment[hu]=Kapcsolódás online fiókjaihoz, és felhasználási módjuk kiválasztása
+Comment[id]=Sambung ke akun daring Anda dan tentukan mereka akan dipakai apa
+Comment[it]=Connette ai propri account online e decice per cosa usarli
+Comment[ja]=オンラインアカウントへの接続や利用方法を設定します。
+Comment[kk]=Желідегі тіркелгілеріңізге байланыс орнатыңыз және олар не үшін қолданылатынын шешіңіз
+Comment[kn]=ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಖಾತೆಗಳೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವ ಕೆಲಸಕ್ಕೆ ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿರ್ಧರಿಸಿ
+Comment[ko]=온라인 계정에 연결하고 그 계정을 어디에 이용할지 설정합니다
+Comment[lt]=Prisijunkite prie savo internetinių paskyrų ir nuspręskite, kam jas naudosite
+Comment[lv]=Savienojieties ar saviem tiešsaistes kontiem un izvēlaties, kam tos izmantot
+Comment[ml]=ഓണ്‍ലൈന്‍ അകൌണ്ടുകള്‍ ബന്ധിപ്പിച്ച് അവ എന്തിന് വേണ്ടി ഉപയോഗിക്കണം എന്ന് തീരുമാനിക്കുക
+Comment[mr]=ऑनलाइन खातींसह जोडणी करा आणि त्याचे कशासाठी वापर करायचे ते ठरवा
+Comment[nb]=Koble til dine kontoer på nettet og bestem hva du skal bruke dem til
+Comment[nl]=Met uw online-accounts verbinden en bepalen waar u ze voor gebruikt
+Comment[or]=ଆପମଙ୍କର ଅନ୍‌ଲାଇନ୍‌ ଖାତା ସହିତ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ତାହାକୁ କଣ ପାଇଁ ବ୍ୟବହାର କରାଯିବ ତାହା ସିଦ୍ଧାନ୍ତ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕੁਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ
+Comment[pl]=Łączenie z kontami online i ustalanie, do czego mają być używane
+Comment[pt]=Lige-se às suas contas online e decida como as utilizar
+Comment[pt_BR]=Conecte-se às suas contas on-line e decida para que usá-las
+Comment[ru]=Подключиться к сетевым учётным записям и решить для чего их использовать
+Comment[sk]=Pripojí vás k vašim účtom sieťových služieb a rozhodne na čo sa použijú
+Comment[sl]=Nadzirajte svoje spletne račune in se odločite za kaj jih boste uporabili
+Comment[sr]=Повежите се на ваше налоге на мрежи и одлучите за шта ћете их користити
+Comment[sr@latin]=Povežite se na vaše naloge na mreži i odlučite za šta ćete ih koristiti
+Comment[sv]=Anslut till dina nätkonton och bestäm hur de ska användas
+Comment[ta]=உங்கள் ஆன்லைன் கணக்குகளில் இணைந்து அவற்றை எதற்கு பயன்படுத்த வேண்டும் என முடிவு செய்யவும்
+Comment[te]=మీ ఆన్‌లైన్ ఖాతాలకు  అనుసంధానమై మరియు వాటిని దేని కొరకు వుపయోగించాలో నిర్ణయించు
+Comment[tg]=Ба ҳисобҳои онлайни худ пайваст шавед ва интихоб кунед, ки онҳоро барои чӣ истифода мебаред
+Comment[th]=เชื่อมต่อไปยังบัญชีออนไลน์ของคุณและตัดสินใจว่าจะใช้เพื่อทำอะไร
+Comment[tr]=Çevrimiçi hesaplarınıza bağlanın ve ne için kullanacağınızı belirleyin
+Comment[uk]=З'єднатись з вашим мережевими обліковими записами і вирішити, що з ними робити 
+Comment[vi]=Kết nối các tài khoản trực tuyến của bạn và quyết định dùng chúng vào việc gì
+Comment[zh_CN]=连接在线账户并决定如何使用
+Comment[zh_HK]=連接到你的網上帳號並決定要用它們來做什麼
+Comment[zh_TW]=連接到您的線上帳號並決定要用它們來做什麼
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center online-accounts
+Icon=goa-panel
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=online-accounts
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=Online Accounts
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the online-accounts control-center panel
+# For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application)
+Keywords=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[an]=Google;Facebook;Twitter;Yahoo;Ret;En linia;Chat;Calandario;Correu;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocha;Leyer-loDimpués;
+Keywords[ar]=جوجل;جووجل;فيسبوك;تويتر;ياهو;وب;ويب;محادثة;تقويم;بريد;اتصال;
+Keywords[as]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[be]=Google;Facebook;Twitter;Yahoo;Сеціва;Інтэрнэт;Чат;Каляндар;Календары;Пошта;Кантакты;Сувязь;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bg]=Гугъл;Фейсбук;Туитър;Яху;Социален;Уеб;В мрежа;Разговор;Календар;Поща;Контакт;Оун клауд;Керберос;ИМАП;SMTP;Покет;Покит;Рийд;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[bn_IN]=Google;Facebook;Twitter;Yahoo;Web;অনলাইন;চ্যাট;ক্যালেন্ডার;মেল;পরিচিতি;ownCloud;Kerberos;IMAP;SMTP;পকেট;ReadItLater;
+Keywords[ca]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ca@valencia]=Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[cs]=Google;Facebook;Twitter;Yahoo;web;on-line;diskuze;chat;kalendář;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[da]=Google;Facebook;Twitter;Yahoo;Internet;Web;Online;Chat;Kalender;Post;E-post;Mail;Email;Kontaktpersoner;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[de]=Google;Facebook;Twitter;Yahoo;Internet;Online;Chat;Kalendar;Mail;E-Mail;Kontakte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[el]=Google;Facebook;Twitter;Yahoo;Ιστός;Με σύνδεση;Συνομιλία;Ημερολόγιο;Αλληλογραφία;Επαφές;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Online;Chat;Calendar;Mail;Contact;
+Keywords[es]=Google;Facebook;Twitter;Yahoo;Web;en línea;Chat;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[eu]=Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fa]=گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[fi]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;keskustelu;kalenteri;sähköposti;yhteystiedot;kontaktit;
+Keywords[fr]=Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gl]=Google;Facebook;Twitter;Yahoo;Web;En liña;Conversa;Calendario;Correo-e;Contacto;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[gu]=Google;Facebook;Twitter;Yahoo;વેબ;ઓનલાઇન;વાતચીત;કૅલેન્ડર;મેઇલ;સંપર્ક;ownCloud;કર્બોસ;IMAP;SMTP;પોકેટ;ReadItLater;
+Keywords[he]=Google;Facebook;Twitter;Yahoo;Web;מקוון;שיחה;יומן;דוא״ל;לוח שנה;צ׳אט;צ'אט;דואר אלקטרוני;דוא"ל;ownCloud;אונליין;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hi]=गूगल;फेसबुक;ट्विटर;याहू;वेब;ऑनलाइन;चैट;कैलेंडर;मेल;संपर्क;ओनक्लाउड;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[hu]=Google;Facebook;Twitter;Yahoo;Web;Online;Csevegés;Chat;Naptár;E-mail;Levél;Levelezés;Névjegyek;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[id]=Google;Facebook;Twitter;Yahoo;Web;Daring;Obrolan;Kalender;Surel;Kontak;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[it]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Conversazioni;Calendario;Email;Posta;Contatto;Contatti;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ja]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;
+Keywords[kn]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ko]=Google;구글;Facebook;페이스북;Twitter;트위터;Yahoo;야후;Web;웹;Online;온라인;Chat;채팅;Calendar;달력;Mail;메일;Contact;연락처;ownCloud;Kerberos;케르베로스;IMAP;SMTP;;Pocket;ReadItLater;
+Keywords[lt]=Google;Facebook;Twitter;Yahoo;Žiniatinklis;Tinkle;Pokalbiai;Kalendorius;Paštas;Kontaktai;ownCloud;Kerberos;IMAP;SMTP;Paketas;SkaitytiVėliau;
+Keywords[lv]=Google;Facebook;Twitter;Yahoo;Web;Tīmeklis;Tiešsaiste;Tērzēšana;Kalendārs;Pasts;kontakti;ownCloud;Kerberos;IMAP;SMTP;Online;Chat;Calendar;Mail;Contact;Pocket;ReadItLater;
+Keywords[mr]=गूगल;फेसबूक;ट्विटर;याहू;वेब;ऑनलाइन;चॅट;कॅलेंडर;मेल;काँट्रॅक्ट;ओनक्लाउड;कर्बेरोस,आईमॅप;एसएमटिपि;पॉकेट;रिडइटलेटर;
+Keywords[nb]=Google;Facebook;Twitter;Yahoo;Web;Nett;Lynmeldinger;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Lomme;ReadItLater;
+Keywords[nl]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Agenda;Pocket;ReadItLater;
+Keywords[or]=Google;Facebook;Twitter;Yahoo;ୱେବ;ଅନଲାଇନ;ଚାର୍ଟ;କ୍ୟାଲେଣ୍ଡର;ମେଲ;ସମ୍ପର୍କ;ownCloud;କର୍ବୋରସ୍‌;IMAP;SMTP;ପକେଟ;ଏହାକୁ ପରେ ପଢ଼ନ୍ତୁ;
+Keywords[pa]=ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Packet;ReaditLater
+Keywords[pl]=Google;Facebook;Twitter;Yahoo;WWW;Web;Online;Komunikator;Chat;Czat;Kalendarz;Poczta;e-mail;email;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[pt]=Google;Facebook;Twitter;Yahoo;Web;Online;Diálogo;Calendário;Correio;Contacto;ownCloud;Kerberos;IMAP;SMTP;ReadItLater;
+Keywords[pt_BR]=Google;Facebook;Twitter;Yahoo;Web;Conectado;Online;Bate-papo;Chat;Calendário;Agenda;E-mail;Correio;Contato;Contatos;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ru]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Календарь;Почта;Контакт;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sk]=Google;Facebook;Twitter;Yahoo;web;on-line;rozhovor;chat;kalendár;e-mail;mail;email;pošta;kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sl]=Google;Facebook;Twitter;Yahoo;Splet;Klepet;Koledar;Elektronska pošta;Stiki;Računi;ownCloud;oblak;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[sr]=гугл;фејсбук;твитер;јаху;веб;мрежа;ћаскање;календар;пошта;контакт;лични облак;керберос;имап;смтп;покет;прочитајкасније;ридитлејтер;
+Keywords[sr@latin]=gugl;fejsbuk;tviter;jahu;veb;mreža;ćaskanje;kalendar;pošta;kontakt;lični oblak;kerberos;imap;smtp;poket;pročitajkasnije;riditlejter;
+Keywords[sv]=Google;Facebook;Twitter;Yahoo;Webb;Nätet;Chatt;Kalender;E-post;Kontakt;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[ta]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[te]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[tg]=Google;Facebook;Twitter;Yahoo;Web;Онлайн;Чат;Тақвим;Почта;Тамос;ownCloud;Kerberos;IMAP;SMTP;Баста;Баъдтар;
+Keywords[tr]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;Çevrimiçi;Sohbet;Takvim;Mektup;Posta;Bağlantı;Kişi;
+Keywords[uk]=Google;Facebook;Twitter;Yahoo;Інтернет;Мережа;Балачка;Календар;Пошта;Контакт;ownCloud;IMAP;SMTP;Pocket;ReadItLater;
+Keywords[zh_CN]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;微博;网络;在线;聊天;日历;邮件;联系人;云存储;稍后阅读;
+Keywords[zh_HK]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;網上;聊天;行事曆;郵件;聯絡人;
+Keywords[zh_TW]=Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;臉書;推特;雅虎奇摩;網頁;線上;聊天;行事曆;郵件;連絡人;
diff --git a/srcpkgs/unity-control-center/files/unity-region-panel.desktop b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
new file mode 100644
index 00000000000000..1f2f0c3177712f
--- /dev/null
+++ b/srcpkgs/unity-control-center/files/unity-region-panel.desktop
@@ -0,0 +1,206 @@
+[Desktop Entry]
+Name=Region & Language
+Name[af]=Streek en taal
+Name[an]=Rechión y idioma
+Name[ar]=المنطقة واللغة
+Name[as]=অঞ্চল & ভাষা
+Name[be]=Мясцовасць і мова
+Name[bg]=Регион и език
+Name[bn_IN]=অঞ্চল & ভাষা
+Name[ca]=Regió i idioma
+Name[ca@valencia]=Regió i idioma
+Name[crh]=Bölge & Til
+Name[cs]=Region a jazyk
+Name[da]=Region & sprog
+Name[de]=Region und Sprache
+Name[el]=Περιοχή & γλώσσα
+Name[en_GB]=Region & Language
+Name[eo]=Regiono kaj lingvo
+Name[es]=Región e idioma
+Name[et]=Piirkond ja keel
+Name[eu]=Eskualdea eta hizkuntza
+Name[fa]=ناحیه و زبان
+Name[fi]=Alue ja kielet
+Name[fr]=Pays & langue
+Name[ga]=Réigiún & Teanga
+Name[gl]=Rexión e idioma
+Name[gu]=પ્રદેશ અને ભાષા
+Name[he]=אזור ושפה
+Name[hi]=क्षेत्र और भाषा
+Name[hu]=Terület és nyelv
+Name[id]=Wilayah & Bahasa
+Name[it]=Regione e lingua
+Name[ja]=地域と言語
+Name[kk]=Аймақ пен тіл
+Name[km]=តំបន់ និង​ភាសា
+Name[kn]=ಪ್ರದೇಶ ಹಾಗು ಭಾಷೆ
+Name[ko]=지역 및 언어
+Name[ky]=Регион жана тил
+Name[lt]=Regionas ir kalba
+Name[lv]=Vieta un valoda
+Name[ml]=സ്ഥലവും ഭാഷയും
+Name[mr]=क्षेत्र व भाषा
+Name[nb]=Region og språk
+Name[ne]=क्षेत्र र भाषा
+Name[nl]=Regio en taal
+Name[or]=ଅଞ୍ଚଳ ଏବଂ ଭାଷା
+Name[pa]=ਖੇਤਰ ਅਤੇ ਭਾਸ਼ਾ
+Name[pl]=Region i język
+Name[pt]=Região & Idioma
+Name[pt_BR]=Região & idioma
+Name[ro]=Regiune și limbă
+Name[ru]=Язык и регион
+Name[sk]=Región a jazyk
+Name[sl]=Področje in jezik
+Name[sr]=Регион и језик
+Name[sr@latin]=Region i jezik
+Name[sv]=Region & språk
+Name[ta]= வட்டாரம் மற்றும் மொழி 
+Name[te]=ప్రాంతము & భాష
+Name[tg]=Забон ва минтақа
+Name[th]=ภูมิภาค & ภาษา
+Name[tr]=Bölge & Dil
+Name[ug]=رايون ۋە تىل
+Name[uk]=Регіон та мова
+Name[vi]=Lãnh thổ và ngôn ngữ
+Name[zh_CN]=区域和语言
+Name[zh_HK]=地區和語言
+Name[zh_TW]=地區和語言
+Comment=Select your display language, formats, keyboard layouts and input sources
+Comment[af]=Kies die vertoontaal, formate, sleutelborduitlegte en toevoerbronne
+Comment[an]=Selecciona o tuyo idioma, formatos, distribucions de teclau y fuents de dentrada
+Comment[ar]=اختر لغة العرض و التنسيق و تخطيط لوحة المفاتيح و مصادر الإدخال
+Comment[as]=আপোনাৰ প্ৰদৰ্শন ভাষা, বিন্যাসসমূহ, কিবৰ্ড বিন্যাসসমূহ আৰু ইনপুট উৎসসমূহ বাছক
+Comment[be]=Выбар мовы інтэрфейсу, фарматаў даных, клавіятурных раскладак і крыніц уводу
+Comment[bg]=Изберете вашия език, формати, клавиатурна подредба и входни устройства
+Comment[bn_IN]=অাপনার প্রদর্শন ভাষা, ফর্ম্যাট, কীবোর্ড সজ্জা এবং ইনপুট সোর্স নির্বাচন করুন
+Comment[ca]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[ca@valencia]=Seleccioneu l'idioma a mostrar, els formats, les disposicions de teclat i les fonts d'entrada
+Comment[cs]=Vyberte jazyk, formáty, rozložení klávesnice a vstupní zdroje
+Comment[da]=Vælg sprog, formater, tastaturlayout samt inputkilder
+Comment[de]=Wählen Sie Ihre Sprache, Formate, Tastaturbelegungen und die Eingabequellen
+Comment[el]=Επιλέξτε γλώσσα εμφάνισης, μορφές, διατάξεις πληκτρολογίου και πηγές εισόδου
+Comment[en_GB]=Select your display language, formats, keyboard layouts and input sources
+Comment[eo]=Elektu vian montran lingvon, formatojn, klavarfasonojn kaj enigajn fontojn
+Comment[es]=Seleccione su idioma, formatos, distribuciones de teclado y fuentes de entrada
+Comment[et]=Vali kuva keel, vormingud, klaviatuuripaigutused ja sisendid
+Comment[eu]=Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak
+Comment[fa]=زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید
+Comment[fi]=Valitse näytettävä kieli, formaatit, näppäimistöasettelu ja syötelähteet
+Comment[fr]=Sélectionnez la langue, les formats, l'agencement clavier et les sources d'entrées
+Comment[gl]=Seleccione o idioma da pantalla, formatos, disposición de teclado e orixes de entrada
+Comment[gu]=તમારી દર્શાવ ભાષા, બંધારણો, કિબોર્ડ લેઆઉટ અને ઇનપુટ સ્ત્રોતોને પસંદ કરો
+Comment[he]=ניתן לבחור את שפת התצוגה, התבניות, פריסות המקלדת ומקורות הקלט
+Comment[hi]=अपनी प्रदर्शन भाषा, स्वरूपों, कीबोर्ड लेआउट और इनपुट सूत्रों का चयन करें
+Comment[hu]=Válassza ki a felület nyelvét, az adatformátumokat, billentyűkiosztásokat és beviteli forrásokat
+Comment[id]=Pilih bahasa tampilan, format, tata letak papan tik, dan sumber-sumber masukan Anda
+Comment[it]=Seleziona la lingua utilizzata, i formati, le disposizioni di tastiera e le sorgenti di input
+Comment[ja]=表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します
+Comment[kk]=Экран тілін, пішімдерін, пернетақта жаймаларын және қайнар көздерін таңдаңыз
+Comment[kn]=ನಿಮ್ಮ ಪ್ರದರ್ಶನದ ಭಾಷೆ, ವಿನ್ಯಾಸಗಳು, ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಮೂಲಗಳನ್ನು ಆರಿಸಿ
+Comment[ko]=표시할 언어, 여러가지 형식, 키보드 배치, 입력 소스를 선택합니다.
+Comment[lt]=Pasirinkite rodymo kalbą, formatus, klaviatūros išdėstymus ir įvesties šaltinius
+Comment[lv]=Izvēlieties redzamo valodu, formātus, tastatūras izkārtojumus un ievades avotus
+Comment[ml]=നിങ്ങളുടെ ഭാഷ, ഘടന, കീബോർഡ് മാതൃക, ഇൻപുട്ട് സോർസ് എന്നിവ തിരഞ്ഞെടുക്കുക
+Comment[mr]=डिस्पले भाषा, रूपण, कळफलक मांडणी आणि इंपुट स्रोत नीवडा
+Comment[nb]=Velg språk for visning, formater, tastaturutforminger og inndatakilder
+Comment[nl]=Schermtaal, formaten, toetsenbordindelingen en invoerbronnen selecteren
+Comment[or]=ଆପଣଙ୍କର ପ୍ରଦର୍ଶନୀ ଭାଷା, ଶୈଳୀ, କିବୋର୍ଡ ବିନ୍ୟାସ ଏବଂ ନିବେଶ ଉତ୍ସଗୁଡ଼ିକୁ ବାଛନ୍ତୁ
+Comment[pa]=ਆਪਣੇ ਵੇਖਾਉਣ ਵਾਲੀ ਭਾਸ਼ਾ, ਫਾਰਮੈਟ, ਕੀਬੋਰਡ ਲੇਆਉਟ ਅਤੇ ਇੰਪੁੱਟ ਸਰੋਤ ਚੁਣੋ
+Comment[pl]=Wybór języka wyświetlania, formatów, układów klawiatury i źródeł wprowadzania
+Comment[pt]=Selecione o seu idioma de apresentação, formatos, disposições de teclado e origens de entrada
+Comment[pt_BR]=Selecione o seus idioma de exibição, formatos, fontes de entradas e disposições de teclado
+Comment[ru]=Выбор языка интерфейса, форматов, раскладки клавиатуры и источников ввода
+Comment[sk]=Umožňuje výber jazyka, formátov, rozloženia klávesnice a zdrojov vstupu
+Comment[sl]=Izberite jezik prikaza, oblike, razporeditve tipk in vnosne vire
+Comment[sr]=Изаберите ваш приказани језик, записе, распореде тастатуре и изворе улаза
+Comment[sr@latin]=Izaberite vaš prikazani jezik, zapise, rasporede tastature i izvore ulaza
+Comment[sv]=Välj dina visningsspråk, format, tangentbordslayouter och inmatningskällor
+Comment[ta]=உங்கள் காட்சி மொழி, வடிவமைப்புகள், விசைப்பலகை தளவமைப்புகள் மற்றும் உள்ளீட்டு மூலங்களைத் தேர்ந்தெடுக்கவும்
+Comment[te]=మీ ప్రదర్శన భాషను, ఫార్మాట్లను, కీబోర్డు లేఅవుట్లను మరియు యిన్పుట్ మూలాలను యెంపికచేయండి
+Comment[tg]=Интихоби забони интерфейс, форматҳо, тарҳбандии клавиатураҳо ва манбаҳои вуруд
+Comment[th]=เลือกภาษาที่แสดง, รูปแบบ, ผังแป้นพิมพ์ และช่องทางป้อนข้อความของคุณ
+Comment[tr]=Görüntüleme dilinizi, biçimlerinizi, klavye düzenlerinizi ve girdi kaynaklarınızı ayarlayın
+Comment[uk]=Вибрати вашу мову, формати, розклади й джерела введення
+Comment[vi]=Chọn ngôn ngữ hiển thị, định dạng, bố cục của bàn phím và nguồn nhập
+Comment[zh_CN]=选择您的显示语言、格式、键盘布局和输入源
+Comment[zh_HK]=選擇你的顯示語言、格式、鍵盤配置和輸入來源
+Comment[zh_TW]=選擇您的顯示語言、格式、鍵盤配置和輸入來源
+Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center region
+Icon=preferences-desktop-locale
+Terminal=false
+Type=Application
+#NoDisplay=true
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-Unity-Settings-Panel;X-GNOME-PersonalSettings;
+X-Unity-Settings-Panel=region
+OnlyShowIn=Unity;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=gnome-control-center
+X-GNOME-Bugzilla-Component=region
+X-GNOME-Bugzilla-Version=3.14.0
+# Translators: those are keywords for the region control-center panel
+Keywords=Language;Layout;Keyboard;Input;
+Keywords[af]=Language;Layout;Keyboard;Input;taal;uitleg;sleutelbord;toetsbord;toevoer;
+Keywords[an]=Idioma;Distribución;Teclau;Dentrada;
+Keywords[ar]=اللغة;التخطيط;مفاتيح;
+Keywords[as]=Language;Layout;Keyboard;Input;
+Keywords[be]=Мова;Раскладка;Клавіятура;Увод;
+Keywords[bg]=Език;Подредба;Клавиатура;Вход;Language;Layout;Keyboard;Input;
+Keywords[bn_IN]=ভাষা;সজ্জা;কীবোর্ড;ইনপুট;
+Keywords[ca]=Idioma;Disposició;Teclat;Entrada;
+Keywords[ca@valencia]=Idioma;Disposició;Teclat;Entrada;
+Keywords[crh]=Til;Tizilim;Klavye;Kirdi;
+Keywords[cs]=jazyk;rozložení;klávesnice;vstup;
+Keywords[da]=Sprog;Layout;Tastatur;Input;Inddata;
+Keywords[de]=Sprache;Belegung;Tastatur;Eingabe;
+Keywords[el]=Γλώσσα;Διάταξη;Πληκτρολόγιο;Είσοδος;Language;Layout;Keyboard;Input;
+Keywords[en_GB]=Language;Layout;Keyboard;Input;
+Keywords[eo]=lingvo;klavarfasono;klavaro;eniga;fulmoklavojn;
+Keywords[es]=Idioma;Distribución;Teclado;Entrada;
+Keywords[et]=Keel;Paigutus;Klaviatuur;Sisend;Sisestamine;
+Keywords[eu]=Hizkuntza;Diseinua;Teklatua;Sarrera;
+Keywords[fa]=زبان;چیدمان;صفحه‌کلید؛ورودی;Language;Layout;Keyboard;Input;
+Keywords[fi]=Kieli;Asettelu;Näppäimistö;Syöte;
+Keywords[fr]=Langue;Disposition;Clavier;Entrée;
+Keywords[ga]=Teanga;Leagan Amach;Méarchlár;Ionchur;
+Keywords[gl]=Idioma:Distribución;Teclado;Entrada;
+Keywords[gu]=ભાષા;લેઆઉટ;કિબોર્ડ;ઇનપુટ;
+Keywords[he]=שפה;פריסה;מקלדת;פלט;
+Keywords[hi]=भाषा;लेआउट;कीबोर्ड; इनपुट;
+Keywords[hu]=Nyelv;kiosztás;billentyűzet;bevitel;
+Keywords[id]=Bahasa;Tata Letak;Papan Tik;Masukan;
+Keywords[it]=Lingua;Disposizione;Layout;Tastiera;Input;
+Keywords[ja]=Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;
+Keywords[kk]=Тіл;Жайма;Пернетақта;Енгізу;
+Keywords[kn]=ಭಾಷೆ;ವಿನ್ಯಾಸ;ಕೀಲಿಮಣೆ;ಇನ್‌ಪುಟ್;
+Keywords[ko]=Language;언어;Layout;배치;Keyboard;키보드;Input;입력;
+Keywords[lt]=Kalba;Išdėstymas;Klaviatūra;Įvestis;
+Keywords[lv]=Valoda;Izkārtojums;Tastatūra;Ievade;Language;Layout;Keyboard;Input;
+Keywords[ml]=Language;Layout;Keyboard;Input;
+Keywords[mr]=भाषा;मांडणी;कळफलक;इंपुट;
+Keywords[nb]=Språk;Utforming;Tastatur;Inndata;
+Keywords[nl]=Language;Layout;Keyboard;Taal;Indeling;Toetsenbord;
+Keywords[or]=ଭାଷା;ବିନ୍ୟାସ;କିବୋର୍ଡ;ନିବେଶ;
+Keywords[pa]=ਭਾਸ਼ਾ;ਲੇਆਉਟ;ਕੀਬੋਰਡ;ਇੰਪੁੱਟ;Language;Layout;Keyboard;Input;
+Keywords[pl]=Język;Układ;Klawiatura;Wprowadzanie;Wejście;
+Keywords[pt]=Idioma;Disposição;Teclado;Entrada;
+Keywords[pt_BR]=Idioma;Disposição;Teclado;Entrada;
+Keywords[ro]=Language;Layout;Keyboard;Input;Limbă;Aranjamente;Limbă;Tastatură;Intrare;
+Keywords[ru]=Язык;Раскладка;Клавиатура;Ввод;
+Keywords[sk]=Jazyk;Rozloženie;Klávesnica;Vstup;
+Keywords[sl]=jezik,razporeditev;tipkovnica;vnos;
+Keywords[sr]=језик;распоред;тастатура;унос;
+Keywords[sr@latin]=jezik;raspored;tastatura;unos;
+Keywords[sv]=Språk;Layout;Tangentbord;Inmatning;
+Keywords[ta]=மொழி;இடஅமைவு;விசைப்பலகை;உள்ளீடு;
+Keywords[te]=భాష;నమూనా;కీబోర్డు;యిన్పుట్;
+Keywords[tg]=Забон;Тарҳбандӣ;Клавиатура;Вуруд;
+Keywords[th]=ภาษา;ผังแป้นพิมพ์;แป้นพิมพ์;ป้อนข้อความ;
+Keywords[tr]=Dil;Yerleşim;Klavye;Giriş;Language;Layout;Keyboard;Input;
+Keywords[ug]=Language;Layout;Keyboard;Input;تىل;ھەرپتاختا;كىرگۈزۈش;
+Keywords[uk]=Мова;Розкладка;Клавіатура;Введення;
+Keywords[vi]=Language;Ngôn;ngữ;Ngon;ngu;Layout;Bố;trí;Bo;tri;Keyboard;Bàn;phím;Ban;phim;Kieu;go;Input;nhập;nhâp;
+Keywords[zh_CN]=Language;Layout;Keyboard;Input;语言;布局;键盘;输入;
+Keywords[zh_HK]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
+Keywords[zh_TW]=Language;Layout;Keyboard;Input;語言;配置;鍵盤;輸入;
diff --git a/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
new file mode 100644
index 00000000000000..13ba041943615a
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0001-Revert-54_enable_alt_tap_in_shortcut.patch.patch
@@ -0,0 +1,71 @@
+From 97a39acd90d60edb9b0b4c34220dabc2b2ee0a40 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 01:08:58 -0400
+Subject: [PATCH 1/8] Revert 54_enable_alt_tap_in_shortcut.patch
+
+---
+ panels/keyboard/cc-keyboard-item.c   | 20 +-------------------
+ panels/keyboard/keyboard-shortcuts.c |  2 +-
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
+index f767d4e..56eb4af 100644
+--- a/panels/keyboard/cc-keyboard-item.c
++++ b/panels/keyboard/cc-keyboard-item.c
+@@ -143,25 +143,14 @@ _set_binding (CcKeyboardItem *item,
+               const char     *value,
+ 	      gboolean        set_backend)
+ {
+-  /* don't reassign <Alt_L> or <Alt> key in the callback to the binding itself (as it's invalid for the cell renderer) */
+-  if ((g_strcmp0 (value, "<Alt_L>") == 0) || (g_strcmp0 (value, "<Alt>") == 0))
+-    return;
+-
+   g_free (item->binding);
+   item->binding = g_strdup (value);
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+-  const char *key;
+-  char *cheated_modifier = NULL;
+-  if (g_strcmp0 (item->binding, "Alt_L") == 0)
+-    cheated_modifier = g_strdup_printf ("<%s>", item->binding);
+-
+   if (set_backend == FALSE)
+     return;
+ 
+-  settings_set_binding (item->settings, item->key, cheated_modifier ? cheated_modifier: item->binding);
+-
+-  g_free (cheated_modifier);
++  settings_set_binding (item->settings, item->key, item->binding);
+ }
+ 
+ const char *
+@@ -452,13 +441,6 @@ cc_keyboard_item_load_from_gsettings (CcKeyboardItem *item,
+   item->settings = g_settings_new (item->schema);
+   item->binding = settings_get_binding (item->settings, item->key);
+   item->editable = g_settings_is_writable (item->settings, item->key);
+-
+-  if ((g_strcmp0 (item->binding, "<Alt>") == 0) || (g_strcmp0 (item->binding, "<Alt_L>") == 0))
+-    {
+-      g_free (item->binding);
+-      item->binding = g_strdup ("Alt_L");
+-    }
+-
+   binding_from_string (item->binding, &item->keyval, &item->keycode, &item->mask);
+ 
+   signal_name = g_strdup_printf ("changed::%s", item->key);
+diff --git a/panels/keyboard/keyboard-shortcuts.c b/panels/keyboard/keyboard-shortcuts.c
+index c2dc943..639c6ba 100644
+--- a/panels/keyboard/keyboard-shortcuts.c
++++ b/panels/keyboard/keyboard-shortcuts.c
+@@ -1718,7 +1718,7 @@ setup_dialog (CcPanel *panel, GtkBuilder *builder)
+   gtk_tree_view_append_column (treeview, column);
+ 
+   renderer = (GtkCellRenderer *) g_object_new (GTK_TYPE_CELL_RENDERER_ACCEL,
+-                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_MODIFIER_TAP,
++                                               "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                                                NULL);
+ 
+   g_signal_connect (treeview, "button_press_event",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
new file mode 100644
index 00000000000000..f83875b93b11f1
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0002-Skip-region-panel.patch
@@ -0,0 +1,24 @@
+From 8613c2f04b2343895d993558dab6c678df0f8750 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 11 Oct 2014 18:50:22 -0400
+Subject: [PATCH 2/8] Skip region panel
+
+---
+ panels/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panels/Makefile.am b/panels/Makefile.am
+index 5ed02c6..5a67273 100644
+--- a/panels/Makefile.am
++++ b/panels/Makefile.am
+@@ -7,7 +7,6 @@ SUBDIRS= \
+ 	color \
+ 	display \
+ 	mouse \
+-	region \
+ 	info \
+ 	sound \
+ 	keyboard \
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
new file mode 100644
index 00000000000000..b806e9d7d7524b
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0003-Remove-Ubuntu-specific-language-code.patch
@@ -0,0 +1,311 @@
+From b1de9f65075350dfd482dc49548a6033cd994687 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sat, 5 Apr 2014 20:25:21 -0400
+Subject: [PATCH 3/8] Remove Ubuntu-specific language code
+
+---
+ panels/common/cc-common-language.c  | 89 ++-----------------------------------
+ panels/common/cc-common-language.h  |  1 -
+ panels/common/cc-language-chooser.c |  8 ++--
+ panels/common/gdm-languages.c       | 30 ++-----------
+ 4 files changed, 11 insertions(+), 117 deletions(-)
+
+diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c
+index 885afe1..e4cdcf5 100644
+--- a/panels/common/cc-common-language.c
++++ b/panels/common/cc-common-language.c
+@@ -326,66 +326,6 @@ cc_common_language_get_current_language (void)
+         return language;
+ }
+ 
+-gchar *
+-cc_common_language_get_property (const gchar *prop_name)
+-{
+-	GDBusConnection  *bus;
+-	gchar            *user_path;
+-	GError           *error = NULL;
+-	GVariant         *properties;
+-	GVariantIter     *iter;
+-	gchar            *key;
+-	GVariant         *value;
+-	gchar            *ret = NULL;
+-
+-	if (g_strcmp0 (prop_name, "Language") != 0 && g_strcmp0 (prop_name, "FormatsLocale") != 0) {
+-		g_warning ("Invalid argument: '%s'", prop_name);
+-		return ret;
+-	}
+-
+-	bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+-	user_path = g_strdup_printf ("/org/freedesktop/Accounts/User%i", getuid ());
+-
+-	properties = g_dbus_connection_call_sync (bus,
+-	                                          "org.freedesktop.Accounts",
+-	                                          user_path,
+-	                                          "org.freedesktop.DBus.Properties",
+-	                                          "GetAll",
+-	                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+-	                                          G_VARIANT_TYPE ("(a{sv})"),
+-	                                          G_DBUS_CALL_FLAGS_NONE,
+-	                                          -1,
+-	                                          NULL,
+-	                                          &error);
+-	if (!properties) {
+-		g_warning ("Error calling GetAll() when retrieving properties for %s: %s", user_path, error->message);
+-		g_error_free (error);
+-                /* g_hash_table_lookup() is not NULL-safe, so don't return NULL */
+-                if (g_strcmp0 (prop_name, "Language") == 0)
+-                        ret = g_strdup ("en");
+-                else
+-                        ret = g_strdup ("en_US.UTF-8");
+-		goto out;
+-	}
+-
+-	g_variant_get (properties, "(a{sv})", &iter);
+-	while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+-		if (g_strcmp0 (key, prop_name) == 0) {
+-			g_variant_get (value, "s", &ret);
+-			break;
+-		}
+-	}
+-
+-	g_variant_unref (properties);
+-	g_variant_iter_free (iter);
+-
+-out:
+-	g_object_unref (bus);
+-	g_free (user_path);
+-
+-	return ret;
+-}
+-
+ static void
+ languages_foreach_cb (gpointer key,
+ 		      gpointer value,
+@@ -467,7 +407,7 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
+ 	char *lang;
+ 	gboolean found;
+ 
+-	lang = cc_common_language_get_property ("Language");
++	lang = cc_common_language_get_current_language ();
+ 	g_debug ("Trying to select lang '%s' in treeview", lang);
+ 	model = gtk_tree_view_get_model (treeview);
+ 	found = FALSE;
+@@ -522,7 +462,6 @@ user_language_has_translations (const char *locale)
+         return ret;
+ }
+ 
+-/*
+ static void
+ add_other_users_language (GHashTable *ht)
+ {
+@@ -602,7 +541,6 @@ add_other_users_language (GHashTable *ht)
+ 
+         g_object_unref (proxy);
+ }
+-*/
+ 
+ GHashTable *
+ cc_common_language_get_initial_languages (void)
+@@ -614,7 +552,6 @@ cc_common_language_get_initial_languages (void)
+         ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 
+         /* Add some common languages first */
+-/*
+         g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("English")));
+         if (gdm_language_has_translations ("en_GB"))
+                 g_hash_table_insert (ht, g_strdup ("en_GB.utf8"), g_strdup (_("British English")));
+@@ -635,29 +572,11 @@ cc_common_language_get_initial_languages (void)
+         if (gdm_language_has_translations ("ar") ||
+             gdm_language_has_translations ("ar_EG"))
+                 g_hash_table_insert (ht, g_strdup ("ar_EG.utf8"), g_strdup (_("Arabic")));
+-*/
+         /* Add the languages used by other users on the system */
+-//        add_other_users_language (ht);
+-
+-        /* Add installed languages */
+-        gchar  *avail_languages;
+-        GError *error = NULL;
+-        if (g_spawn_command_line_sync ("/usr/share/language-tools/language-options",
+-                                        &avail_languages, NULL, NULL, &error)) {
+-                name = strtok (avail_languages, "\n");
+-                while (name != NULL) {
+-                        language = gdm_get_language_from_name (name, NULL);
+-                        g_hash_table_insert (ht, g_strdup (name), language);
+-                        name = strtok (NULL, "\n");
+-                }
+-                g_free (avail_languages);
+-        } else {
+-                g_warning ("Couldn't get available languages: %s", error->message);
+-                g_error_free (error);
+-        }
++        add_other_users_language (ht);
+ 
+-        /* Add current language */
+-        name = cc_common_language_get_property ("Language");
++        /* Add current locale */
++        name = cc_common_language_get_current_language ();
+         if (g_hash_table_lookup (ht, name) == NULL) {
+                 language = gdm_get_language_from_name (name, NULL);
+                 g_hash_table_insert (ht, name, language);
+diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h
+index 9894988..d88d107 100644
+--- a/panels/common/cc-common-language.h
++++ b/panels/common/cc-common-language.h
+@@ -45,7 +45,6 @@ guint    cc_common_language_add_available_languages (GtkListStore     *store,
+                                                      GHashTable       *user_langs);
+ gboolean cc_common_language_has_font                (const gchar  *locale);
+ gchar   *cc_common_language_get_current_language    (void);
+-gchar   *cc_common_language_get_property            (const gchar  *prop_name);
+ 
+ GHashTable *cc_common_language_get_initial_languages   (void);
+ GHashTable *cc_common_language_get_initial_regions     (const gchar *lang);
+diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c
+index 502dc59..bd0ea54 100644
+--- a/panels/common/cc-language-chooser.c
++++ b/panels/common/cc-language-chooser.c
+@@ -105,8 +105,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 
+ 	user_langs = cc_common_language_get_initial_languages ();
+ 
+-	/* Add the current language first */
+-	name = cc_common_language_get_property ("Language");
++	/* Add the current locale first */
++	name = cc_common_language_get_current_language ();
+ 	display = g_hash_table_lookup (user_langs, name);
+ 
+         gtk_list_store_append (store, &iter);
+@@ -118,8 +118,8 @@ cc_add_user_languages (GtkTreeModel *model)
+ 	g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store);
+ 
+ 	/* And now the "Other..." selection */
+-//        gtk_list_store_append (store, &iter);
+-//        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
++        gtk_list_store_append (store, &iter);
++        gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other..."), -1);
+ 
+         g_hash_table_destroy (user_langs);
+ }
+diff --git a/panels/common/gdm-languages.c b/panels/common/gdm-languages.c
+index 76201c2..32adc44 100644
+--- a/panels/common/gdm-languages.c
++++ b/panels/common/gdm-languages.c
+@@ -224,7 +224,6 @@ construct_language_name (const char *language,
+                          const char *codeset,
+                          const char *modifier)
+ {
+-        const char *adj_codeset;
+         char *name;
+ 
+         g_assert (language[0] != 0);
+@@ -232,17 +231,12 @@ construct_language_name (const char *language,
+         g_assert (codeset == NULL || codeset[0] != 0);
+         g_assert (modifier == NULL || modifier[0] != 0);
+ 
+-        if (g_strcmp0 (codeset, "utf8") == 0) {
+-                adj_codeset = "UTF-8";
+-        } else
+-                adj_codeset = codeset;
+-
+         name = g_strdup_printf ("%s%s%s%s%s%s%s",
+                                 language,
+                                 territory != NULL? "_" : "",
+                                 territory != NULL? territory : "",
+                                 codeset != NULL? "." : "",
+-                                codeset != NULL? adj_codeset : "",
++                                codeset != NULL? codeset : "",
+                                 modifier != NULL? "@" : "",
+                                 modifier != NULL? modifier : "");
+ 
+@@ -860,7 +854,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         const char *ccode_longT;
+         const char *ccode;
+         const char *ccode_id;
+-        const char *lang_common_name;
+         const char *lang_name;
+ 
+         if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry"))
+@@ -872,7 +865,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+         ccode_longB = NULL;
+         ccode_longT = NULL;
+         ccode_id = NULL;
+-        lang_common_name = NULL;
+         lang_name = NULL;
+ 
+         while (*attr_names && *attr_values) {
+@@ -909,11 +901,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                                 }
+                                 ccode_id = *attr_values;
+                         }
+-                } else if (g_str_equal (*attr_names, "common_name")) {
+-                        /* skip if empty */
+-                        if (**attr_values) {
+-                                lang_common_name = *attr_values;
+-                        }
+                 } else if (g_str_equal (*attr_names, "name")) {
+                         lang_name = *attr_values;
+                 }
+@@ -922,10 +909,6 @@ languages_parse_start_tag (GMarkupParseContext      *ctx,
+                 ++attr_values;
+         }
+ 
+-        if (lang_common_name != NULL) {
+-                lang_name = lang_common_name;
+-        }
+-
+         if (lang_name == NULL) {
+                 return;
+         }
+@@ -1149,7 +1132,6 @@ gdm_get_language_from_name (const char *name,
+         char *langinfo_codeset;
+         char *translated_language;
+         char *translated_territory;
+-        char *modifier;
+         gboolean is_utf8 = TRUE;
+ 
+         g_return_val_if_fail (name != NULL, NULL);
+@@ -1172,13 +1154,12 @@ gdm_get_language_from_name (const char *name,
+         language_code = NULL;
+         territory_code = NULL;
+         codeset_code = NULL;
+-        modifier = NULL;
+ 
+         gdm_parse_language_name (name,
+                                  &language_code,
+                                  &territory_code,
+                                  &codeset_code,
+-                                 &modifier);
++                                 NULL);
+ 
+         if (language_code == NULL) {
+                 goto out;
+@@ -1204,7 +1185,7 @@ gdm_get_language_from_name (const char *name,
+                                         translated_territory);
+         }
+ 
+-//        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
++        language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8);
+ 
+         if (codeset_code == NULL && langinfo_codeset != NULL) {
+             codeset_code = g_strdup (langinfo_codeset);
+@@ -1216,10 +1197,6 @@ gdm_get_language_from_name (const char *name,
+                                         codeset_code);
+         }
+ 
+-        if (modifier != NULL) {
+-                g_string_append_printf (full_language, " - %s", modifier);
+-        }
+-
+ out:
+        g_free (language_code);
+        g_free (territory_code);
+@@ -1227,7 +1204,6 @@ out:
+        g_free (langinfo_codeset);
+        g_free (translated_language);
+        g_free (translated_territory);
+-       g_free (modifier);
+ 
+        if (full_language->len == 0) {
+                g_string_free (full_language, TRUE);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
new file mode 100644
index 00000000000000..b416dfa653fb30
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0005-Allow-gnome-control-center-to-run-at-the-same-time.patch
@@ -0,0 +1,25 @@
+From be3be4c5320920a23d7e09fa08ef2a3cf066dda7 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:54:41 -0400
+Subject: [PATCH 5/8] Allow gnome-control-center to run at the same time
+
+---
+ shell/control-center.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index de27113..a91eba1 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -308,7 +308,7 @@ main (int argc, char **argv)
+   shell = gnome_control_center_new ();
+ 
+   /* enforce single instance of this application */
+-  application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
++  application = gtk_application_new ("org.gnome.ControlCenterUnity", G_APPLICATION_HANDLES_COMMAND_LINE);
+   g_signal_connect (application, "startup",
+                     G_CALLBACK (application_startup_cb), shell);
+   g_signal_connect (application, "command-line",
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
new file mode 100644
index 00000000000000..7efb997ddc8d35
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0006-Remove-overlay-scrollbar-from-GTK_MODULES.patch
@@ -0,0 +1,49 @@
+From f76eb169510d94f028001423f759ed4cd142fe59 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 9 Jun 2014 15:32:07 -0400
+Subject: [PATCH 6/8] Remove overlay-scrollbar from GTK_MODULES
+
+---
+ shell/control-center.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/shell/control-center.c b/shell/control-center.c
+index a91eba1..f484351 100644
+--- a/shell/control-center.c
++++ b/shell/control-center.c
+@@ -281,9 +281,32 @@ application_startup_cb (GApplication       *application,
+    */
+ }
+ 
++void
++remove_substring(char *src, const char *remove)
++{
++  while (src = strstr (src, remove)) {
++    memmove (src, src + strlen (remove), strlen (src + strlen(remove)) + 1);
++  }
++}
++
++void
++remove_overlay_scrollbars ()
++{
++  char *temp = getenv ("GTK_MODULES");
++  if (temp == NULL) {
++    return;
++  }
++
++  char *modules = strdup (temp);
++  remove_substring (modules, "overlay-scrollbar");
++  setenv ("GTK_MODULES", modules, 1);
++  free (modules);
++}
++
+ int
+ main (int argc, char **argv)
+ {
++  remove_overlay_scrollbars ();
+   GnomeControlCenter *shell;
+   GtkApplication *application;
+   int status;
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
new file mode 100644
index 00000000000000..bc2034ad6c16fd
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0007-Rename-libgnome-bluetooth-to-libunity-bluetooth.patch
@@ -0,0 +1,67 @@
+From 251777027c92afc71d4d0b5ca4ccd53762b1992c Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:21:12 -0500
+Subject: [PATCH 7/8] Rename libgnome-bluetooth to libunity-bluetooth
+
+---
+ panels/bluetooth/Makefile.am                        | 2 +-
+ panels/bluetooth/gnome-bluetooth/lib/Makefile.am    | 6 +++---
+ panels/bluetooth/gnome-bluetooth/wizard/Makefile.am | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/panels/bluetooth/Makefile.am b/panels/bluetooth/Makefile.am
+index 9feb00b..497823c 100644
+--- a/panels/bluetooth/Makefile.am
++++ b/panels/bluetooth/Makefile.am
+@@ -30,7 +30,7 @@ libbluetooth_la_SOURCES =			\
+ libbluetooth_la_LIBADD = \
+ 	$(PANEL_LIBS) \
+ 	$(BLUETOOTH_PANEL_LIBS) \
+-	$(builddir)/gnome-bluetooth/lib/libgnome-bluetooth.la
++	$(builddir)/gnome-bluetooth/lib/libunity-bluetooth.la
+ 
+ libbluetooth_la_LDFLAGS = $(PANEL_LDFLAGS)
+ 
+diff --git a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+index 50e5369..fc39095 100644
+--- a/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/lib/Makefile.am
+@@ -1,7 +1,7 @@
+ EXTRA_DIST = 
+ CLEANFILES =
+ 
+-lib_LTLIBRARIES = libgnome-bluetooth.la
++lib_LTLIBRARIES = libunity-bluetooth.la
+ 
+ # will be scanned for introspection annotation, but won't be installed
+ libgnome_bluetooth_c_sources =		\
+@@ -25,11 +25,11 @@ libgnome_bluetooth_private_headers =	\
+ 	bluetooth-fdo-glue.h
+ 
+ # public headers don't need to be listed, are handled by _HEADERS
+-libgnome_bluetooth_la_SOURCES =			\
++libunity_bluetooth_la_SOURCES =			\
+ 	$(libgnome_bluetooth_private_headers)	\
+ 	$(libgnome_bluetooth_c_sources)
+ 
+-libgnome_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
++libunity_bluetooth_la_LIBADD = $(BLUETOOTH_PANEL_LIBS)
+ 
+ libgnome_bluetooth_introspect_headers =			\
+ 	bluetooth-client.h				\
+diff --git a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+index 39f12c4..53d2414 100644
+--- a/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
++++ b/panels/bluetooth/gnome-bluetooth/wizard/Makefile.am
+@@ -9,7 +9,7 @@ bin_PROGRAMS = bluetooth-wizard
+ 
+ bluetooth_wizard_SOURCES = main.c
+ 
+-bluetooth_wizard_LDADD = $(builddir)/../lib/libgnome-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
++bluetooth_wizard_LDADD = $(builddir)/../lib/libunity-bluetooth.la libwizard.la $(BLUETOOTH_PANEL_LIBS) $(LIBM)
+ bluetooth_wizard_LDFLAGS = -rdynamic
+ 
+ AM_CFLAGS = $(BLUETOOTH_PANEL_CFLAGS) $(WARN_CFLAGS) $(DISABLE_DEPRECATED) -DPKGDATADIR="\"$(pkgdatadir)\""
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
new file mode 100644
index 00000000000000..ed5dda7e8562ec
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/0008-Move-faces-images-usr-share-pixmaps-faces-unity.patch
@@ -0,0 +1,37 @@
+From 5f52f3573d66730af87ccaababcc828019aebf8f Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 25 Jan 2016 17:24:39 -0500
+Subject: [PATCH 8/8] Move faces images /usr/share/pixmaps/faces{,-unity}
+
+---
+ panels/user-accounts/data/faces/Makefile.am | 2 +-
+ panels/user-accounts/um-photo-dialog.c      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/panels/user-accounts/data/faces/Makefile.am b/panels/user-accounts/data/faces/Makefile.am
+index a9c39cc..05d3b06 100644
+--- a/panels/user-accounts/data/faces/Makefile.am
++++ b/panels/user-accounts/data/faces/Makefile.am
+@@ -1,5 +1,5 @@
+ 
+-imagedir = $(datadir)/pixmaps/faces
++imagedir = $(datadir)/pixmaps/faces-unity
+ 
+ image_DATA = \
+ 	astronaut.jpg \
+diff --git a/panels/user-accounts/um-photo-dialog.c b/panels/user-accounts/um-photo-dialog.c
+index 81f990a..7bd729b 100644
+--- a/panels/user-accounts/um-photo-dialog.c
++++ b/panels/user-accounts/um-photo-dialog.c
+@@ -388,7 +388,7 @@ setup_photo_popup (UmPhotoDialog *um)
+         for (i = 0; dirs[i] != NULL; i++) {
+                 char *path;
+ 
+-                path = g_build_filename (dirs[i], "pixmaps", "faces", NULL);
++                path = g_build_filename (dirs[i], "pixmaps", "faces-unity", NULL);
+                 dir = g_dir_open (path, 0, NULL);
+                 if (dir == NULL) {
+                         g_free (path);
+-- 
+2.8.2
+
diff --git a/srcpkgs/unity-control-center/patches/remove-gnome-common.patch b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
new file mode 100644
index 00000000000000..f1ce8b03da6f77
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-gnome-common.patch
@@ -0,0 +1,9 @@
+diff -p1ru a/configure.ac b/configure.ac
+--- a/configure.ac	2023-02-21 02:17:39.000000000 +0800
++++ b/configure.ac	2024-07-22 11:45:02.995000000 +0800
+@@ -36,5 +36,2 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GE
+ 
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-
+ AC_PATH_XTRA
diff --git a/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..360875328b8da6
--- /dev/null
+++ b/srcpkgs/unity-control-center/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,44 @@
+diff -p1ru a/panels/screen/cc-screen-panel.c b/panels/screen/cc-screen-panel.c
+--- a/panels/screen/cc-screen-panel.c	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/cc-screen-panel.c	2024-08-06 07:49:35.315105356 +0800
+@@ -541,9 +541,2 @@ cc_screen_panel_init (CcScreenPanel *sel
+ 
+-  /* bind the screen lock suspend checkbutton */
+-  widget = WID ("screen_lock_suspend_checkbutton");
+-  g_settings_bind (self->priv->lock_settings,
+-                   "ubuntu-lock-on-suspend",
+-                   widget, "active",
+-                   G_SETTINGS_BIND_DEFAULT);
+-
+   widget = WID ("screen_vbox");
+diff -p1ru a/panels/screen/screen.ui b/panels/screen/screen.ui
+--- a/panels/screen/screen.ui	2023-02-21 02:17:29.000000000 +0800
++++ b/panels/screen/screen.ui	2024-08-06 07:51:13.397039849 +0800
+@@ -300,27 +300,2 @@
+                         <child>
+-                          <object class="GtkHBox" id="screen_suspend_hbox">
+-                            <property name="visible">True</property>
+-                            <property name="can_focus">False</property>
+-                            <property name="spacing">6</property>
+-                            <child>
+-                              <object class="GtkCheckButton" id="screen_lock_suspend_checkbutton">
+-                                <property name="label" translatable="yes">Require my password when waking from suspend</property>
+-                                <property name="use_action_appearance">False</property>
+-                                <property name="visible">True</property>
+-                                <property name="can_focus">True</property>
+-                              </object>
+-                              <packing>
+-                                <property name="expand">False</property>
+-                                <property name="fill">False</property>
+-                                <property name="position">0</property>
+-                              </packing>
+-                            </child>
+-                          </object>
+-                          <packing>
+-                            <property name="expand">False</property>
+-                            <property name="fill">False</property>
+-                            <property name="position">2</property>
+-                          </packing>
+-                        </child>
+-                        <child>
+                           <object class="GtkHBox" id="hbox2">
diff --git a/srcpkgs/unity-control-center/template b/srcpkgs/unity-control-center/template
new file mode 100644
index 00000000000000..aba197ea3993b6
--- /dev/null
+++ b/srcpkgs/unity-control-center/template
@@ -0,0 +1,66 @@
+# Template file for 'unity-control-center'
+pkgname=unity-control-center
+version=15.04.0+23.04.20230220
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/${pkgname} --disable-static --enable-fcitx \
+ --disable-onlineaccounts"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libtool
+ ModemManager-devel pkg-config ttf-ubuntu-font-family vala wget"
+makedepends="accountsservice-devel cups-pk-helper fcitx-devel
+ gnome-desktop-devel gnome-menus-devel gtk+3-devel ibus-devel libcanberra-devel
+ libgeonames-devel libgtop-devel libnma-devel libnotify-devel
+ libpwquality-devel libtimezonemap-devel libwacom-devel mit-krb5-devel
+ NetworkManager-devel polkit-devel pulseaudio-devel unity-settings-daemon-devel
+ upower-devel"
+depends="clutter-gtk fcitx gnome-color-manager gnome-control-center grilo
+ gsettings-desktop-schemas libgnomekbd network-manager-applet NetworkManager
+ openrc-settingsd smbclient sound-theme-freedesktop system-config-printer
+ webkit2gtk yaru"
+short_desc="Control Center for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-control-center"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-control-center_${version}.orig.tar.gz"
+checksum=b066a844d54f5c8dac9639a429f4e3d313f1828d265ec39e691c5dcea7d06c0e
+make_check=ci-skip # po/POTFILES.in file doesn't have everything
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+}
+
+post_install() {
+	chmod 750 "${DESTDIR}/usr/share/polkit-1/rules.d/"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	panels/info/logo-generator \
+	--logo panels/info/UbuntuLogoBlank.png \
+	--text "Unity for Void" \
+	--output "${DESTDIR}/usr/share/unity-control-center/ui/UbuntuLogo.png"
+
+	vinstall "${FILESDIR}/system-config-printer-unity.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-online-accounts-panel.desktop" 644 \
+	usr/share/applications
+	vinstall "${FILESDIR}/unity-region-panel.desktop" 644 \
+	usr/share/applications
+}
+
+unity-control-center-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+		vmove usr/share/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-core/template b/srcpkgs/unity-core/template
new file mode 100644
index 00000000000000..02d8fd0d0308c8
--- /dev/null
+++ b/srcpkgs/unity-core/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-core'
+pkgname=unity-core
+version=7.7.0+23.04.20230222.2
+revision=1
+build_style=meta
+depends="indicator-application indicator-appmenu indicator-bluetooth
+ indicator-datetime indicator-keyboard indicator-power indicator-printers
+ indicator-session indicator-sound lightdm-unity-greeter nemo session-shortcuts
+ unity unity-gtk-module unity-indicator-appearance unity-lens-applications
+ unity-lens-files unity-scope-home unity-session unity-settings
+ unity-settings-daemon zeitgeist"
+short_desc="Metapackage for the core Unity desktop environment"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="Public Domain"
+homepage="https://unityd.org"
diff --git a/srcpkgs/unity-devel b/srcpkgs/unity-devel
new file mode 120000
index 00000000000000..5f1526af706b28
--- /dev/null
+++ b/srcpkgs/unity-devel
@@ -0,0 +1 @@
+unity
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module-devel b/srcpkgs/unity-gtk-module-devel
new file mode 120000
index 00000000000000..de026caa9bbe88
--- /dev/null
+++ b/srcpkgs/unity-gtk-module-devel
@@ -0,0 +1 @@
+unity-gtk-module
\ No newline at end of file
diff --git a/srcpkgs/unity-gtk-module/files/90unity-gtk-module b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
new file mode 100644
index 00000000000000..9f691453fa6bc0
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/90unity-gtk-module
@@ -0,0 +1,2 @@
+export GTK_MODULES=$GTK_MODULES:unity-gtk-module
+dbus-update-activation-environment --verbose
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
new file mode 100644
index 00000000000000..609771fe0f8d3c
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/finish
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES=$$(echo -n $${GTK_MODULES} | awk -v RS=: -v ORS=: "/^unity-gtk-module$/ {next} {print}" | sed -e "s/:*$//")
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/files/unity-gtk-module/run b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
new file mode 100644
index 00000000000000..fccdec35a0ea61
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/files/unity-gtk-module/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+GTK_MODULES="$${GTK_MODULES:+$GTK_MODULES:}unity-gtk-module"
+exec dbus-update-activation-environment --verbose GTK_MODULES
diff --git a/srcpkgs/unity-gtk-module/template b/srcpkgs/unity-gtk-module/template
new file mode 100644
index 00000000000000..0b639794040a37
--- /dev/null
+++ b/srcpkgs/unity-gtk-module/template
@@ -0,0 +1,37 @@
+# Template file for 'unity-gtk-module'
+pkgname=unity-gtk-module
+version=0.0.0+18.04.20171202
+revision=1
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --with-gtk=3 --enable-gtk-doc \
+ --disable-static"
+hostmakedepends="automake glib-devel gtk-doc libtool pkg-config"
+makedepends="gtk+3-devel"
+depends="dbus"
+short_desc="Unity GTK+ Module"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="LGPL-3.0-only"
+homepage="https://launchpad.net/unity-gtk-module"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-gtk-module_${version}.orig.tar.gz"
+checksum=5a78ae6b021aaf35f573a56c7803773b0accdf34112ebfebd00651be87c0e28e
+replaces="appmenu-gtk3-module>=0"
+conflicts="appmenu-gtk3-module"
+
+pre_configure() {
+	autoreconf -vfi
+}
+
+post_install() {
+	vinstall ${FILESDIR}/90unity-gtk-module 755 etc/X11/xinit/xinitrc.d
+	vsv unity-gtk-module
+}
+
+unity-gtk-module-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..0eef3796c794c5
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/patches/use-ayatana-libraries.patch
@@ -0,0 +1,18 @@
+diff -p1ru a/usr/bin/unity-indicator-appearance b/usr/bin/unity-indicator-appearance
+--- a/usr/bin/unity-indicator-appearance	2022-09-09 23:39:17.000000000 +0800
++++ b/usr/bin/unity-indicator-appearance	2024-07-31 11:16:27.596805842 +0800
+@@ -5,3 +5,3 @@ import gi
+ gi.require_version("Gtk", "3.0")
+-gi.require_version('AppIndicator3', '0.1')
++gi.require_version('AyatanaAppIndicator3', '0.1')
+ gi.require_version('Notify', '0.7')
+@@ -18,3 +18,3 @@ from gi.repository import Gtk as gtk
+ from gi.repository import Gio as gio
+-from gi.repository import AppIndicator3 as appindicator
++from gi.repository import AyatanaAppIndicator3 as appindicator
+ from gi.repository import Notify as notify
+@@ -150,2 +150,2 @@ if __name__ == "__main__":
+     signal.signal(signal.SIGINT, signal.SIG_DFL)
+-    main()
+\ No newline at end of file
++    main()
diff --git a/srcpkgs/unity-indicator-appearance/template b/srcpkgs/unity-indicator-appearance/template
new file mode 100644
index 00000000000000..55d4c79d819754
--- /dev/null
+++ b/srcpkgs/unity-indicator-appearance/template
@@ -0,0 +1,15 @@
+# Template file for 'unity-indicator-appearance'
+pkgname=unity-indicator-appearance
+version=1.2
+revision=1
+short_desc="Indicator to change theme or accent color"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-indicator-appearance_${version}_all.deb"
+checksum=f1b47aabbb4069f6e1cc6bd35cc79961e1a18224d1b3971e9fbcd39c4f0f3306
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+}
diff --git a/srcpkgs/unity-lens-applications/template b/srcpkgs/unity-lens-applications/template
new file mode 100644
index 00000000000000..694a675af1eabe
--- /dev/null
+++ b/srcpkgs/unity-lens-applications/template
@@ -0,0 +1,42 @@
+# Template file for 'unity-lens-applications'
+pkgname=unity-lens-applications
+version=7.1.0+16.10.20160927
+revision=1
+_ubuntu_rel=0ubuntu8
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --disable-static \
+ --libexecdir=/usr/lib/${pkgname} --disable-schemas-compile"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="db-devel dconf-devel gnome-menus-devel libcolumbus-devel
+ libgee-devel libunity-devel libzeitgeist-devel xapian-core-devel
+ zeitgeist-devel"
+depends="dconf"
+short_desc="Daemon that exposes you applications to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-lens-applications"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}.orig.tar.gz"
+checksum=b5703a9a5cfdd47d9645ea20df1dcd575715e11ae8ecef3a72047d6225a233af
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-lens-applications_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-lens-applications_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-lens-files/template b/srcpkgs/unity-lens-files/template
new file mode 100644
index 00000000000000..013863eff50cdc
--- /dev/null
+++ b/srcpkgs/unity-lens-files/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-lens-files'
+pkgname=unity-lens-files
+version=7.1.0+17.10.20170605
+revision=1
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/${pkgname} \
+ --disable-static"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel glib-devel intltool pkg-config vala"
+makedepends="libgee-devel libunity-devel zeitgeist-devel"
+depends="dconf libxdg-basedir python3-xdg xdg-user-dirs"
+short_desc="Daemon exposing your files and file history to Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-place-files"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-lens-files_${version}.orig.tar.gz"
+checksum=f1642cdf1b6383dd58771c9733b839a6e86d3a79368a07703b91740cf18fac92
+make_check=ci-skip # 'assert_cmpint' and 'assert_cmpstr' ambiguous reference errors
+
+pre_configure() {
+	aclocal --install --force
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_install() {
+	rm -r "${DESTDIR}/usr/locale/"
+}
diff --git a/srcpkgs/unity-scope-home/INSTALL b/srcpkgs/unity-scope-home/INSTALL
new file mode 100644
index 00000000000000..ba3d0d0b7f4941
--- /dev/null
+++ b/srcpkgs/unity-scope-home/INSTALL
@@ -0,0 +1,6 @@
+#INSTALL
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/REMOVE b/srcpkgs/unity-scope-home/REMOVE
new file mode 100644
index 00000000000000..454d55c8d93151
--- /dev/null
+++ b/srcpkgs/unity-scope-home/REMOVE
@@ -0,0 +1,6 @@
+#REMOVE
+case "$ACTION" in
+post)
+	trust extract-compat
+	;;
+esac
diff --git a/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
new file mode 100644
index 00000000000000..37230f7f35aa9e
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0002-productsearch.ubuntu.com-only-accepts-locale-string-.patch
@@ -0,0 +1,44 @@
+From 2e685f380bdfc611c6de8a46615868afa4c11599 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:16 -0400
+Subject: [PATCH 2/4] productsearch.ubuntu.com only accepts locale string
+ without encoding
+
+---
+ src/smart-scopes-search.vala | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index eabe963..55a1bfd 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -238,7 +238,7 @@ namespace Unity.HomeScope.SmartScopes {
+         var query_dict = new HashTable<string, string> (str_hash, str_equal);
+         if (info.locale != null)
+         {
+-          query_dict["locale"] = info.locale;
++          query_dict["locale"] = info.locale.split (".")[0];
+         }
+         if (info.build_id != null)
+         {
+@@ -393,7 +393,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+         if (info.build_id != null)
+         {
+@@ -453,7 +453,7 @@ namespace Unity.HomeScope.SmartScopes {
+         if (info.locale != null)
+         {
+           sb.append ("&locale=");
+-          sb.append (info.locale);
++          sb.append (info.locale.split (".")[0]);
+         }
+ 
+         return sb.str;
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
new file mode 100644
index 00000000000000..eabab955c48821
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/0003-Show-description-of-error-code.patch
@@ -0,0 +1,29 @@
+From 8211b626ded5384d64361585733452a7e472476b Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 7 Apr 2014 20:27:48 -0400
+Subject: [PATCH 3/4] Show description of error code
+
+---
+ src/smart-scopes-search.vala | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/smart-scopes-search.vala b/src/smart-scopes-search.vala
+index 55a1bfd..80b97ea 100644
+--- a/src/smart-scopes-search.vala
++++ b/src/smart-scopes-search.vala
+@@ -493,9 +493,11 @@ namespace Unity.HomeScope.SmartScopes {
+       
+       if (cancellable != null)
+         cancellable.disconnect (cancel_id);
++
++      string reason = Soup.Status.get_phrase (msg.status_code);
+       
+       if (msg.status_code < 100)
+-        throw new IOError.FAILED ("Request failed with error %u", msg.status_code);
++        throw new IOError.FAILED ("Request failed with error %u: %s", msg.status_code, reason);
+       
+       if (msg.status_code != 200)
+       {
+-- 
+2.1.1
+
diff --git a/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
new file mode 100644
index 00000000000000..f8770a5eb49993
--- /dev/null
+++ b/srcpkgs/unity-scope-home/patches/fix-vala-0.56-errors.patch
@@ -0,0 +1,48 @@
+From 2f35f93d7619932fb21cd1408165e9b95731d4e6 Mon Sep 17 00:00:00 2001
+From: c4pp4
+Date: Fri, 16 Sep 2022 22:28:14 +0200
+Subject: [PATCH 1/1] Fix build against vala-0.56
+
+Signed-off-by: c4pp4
+---
+ src/client-scopes-info.vala | 2 --
+ src/scope.vala              | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/client-scopes-info.vala b/src/client-scopes-info.vala
+index c3f1a66..8291afa 100644
+--- a/src/client-scopes-info.vala
++++ b/src/client-scopes-info.vala
+@@ -25,8 +25,6 @@ namespace Unity.HomeScope
+    */
+   public class ClientScopesInfo
+   {
+-    public static const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+-
+     private Gee.ArrayList<string> added_scopes = new Gee.ArrayList<string> ();
+     private Gee.ArrayList<string> removed_scopes = new Gee.ArrayList<string> ();
+ 
+diff --git a/src/scope.vala b/src/scope.vala
+index 78cda0f..136f544 100644
+--- a/src/scope.vala
++++ b/src/scope.vala
+@@ -19,6 +19,7 @@
+ 
+ namespace Unity.HomeScope {
+ 
++const string CLIENT_SCOPES_FILE = Config.PKGDATADIR + "/client-scopes.json";
+ const string ICON_PATH = Config.DATADIR + "/icons/unity-icon-theme/places/svg/";
+ const int ICON_COLUMN = 1;
+ 
+@@ -187,7 +188,7 @@ public class HomeScope : Unity.AggregatorScope
+ 
+       try
+       {
+-        client_scopes_info = ClientScopesInfo.from_file (ClientScopesInfo.CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
++        client_scopes_info = ClientScopesInfo.from_file (CLIENT_SCOPES_FILE, ScopeRegistry.instance ().flatten ());
+       }
+       catch (Error e)
+       {
+-- 
+2.35.1
+
diff --git a/srcpkgs/unity-scope-home/template b/srcpkgs/unity-scope-home/template
new file mode 100644
index 00000000000000..80ba7960d1ea15
--- /dev/null
+++ b/srcpkgs/unity-scope-home/template
@@ -0,0 +1,35 @@
+# Template file for 'unity-scope-home'
+pkgname=unity-scope-home
+version=6.8.2+19.04.20190412
+revision=1
+_ubuntu_rel=0ubuntu6
+#archs="i686 x86_64"
+#build_wrksrc=
+build_style=gnu-configure
+configure_args="--prefix=/usr --libexecdir=/usr/lib/unity-scope-home"
+#make_build_args=""
+#make_install_args=""
+#conf_files=""
+#make_dirs="/var/log/dir 0755 root root"
+hostmakedepends="automake gettext-devel intltool libtool pkg-config vala wget"
+makedepends="dee-devel glib-devel json-glib-devel libgee-devel
+ libsoup-gnome-devel libunity-devel"
+depends="p11-kit"
+short_desc="Home scope that aggregates results from multiple scopes"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://launchpad.net/unity-scope-home"
+#changelog=""
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}.orig.tar.gz"
+checksum=070acae8dce62240c1ea2f8afcc7a6ea80704e95e525e294c7b0d79f32e2dcb1
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-scope-home_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-scope-home_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
diff --git a/srcpkgs/unity-session/files/hud-service.desktop b/srcpkgs/unity-session/files/hud-service.desktop
new file mode 100644
index 00000000000000..bc48b7fd6fe7a9
--- /dev/null
+++ b/srcpkgs/unity-session/files/hud-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity HUD Service
+NoDisplay=true
+TryExec=/usr/lib/hud/hud-service
+Exec=/usr/lib/hud/hud-service
diff --git a/srcpkgs/unity-session/files/indicator-bluetooth.desktop b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
new file mode 100644
index 00000000000000..c28665756a4614
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-bluetooth.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Bluetooth Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
+Exec=/usr/lib/indicator-bluetooth/indicator-bluetooth-service
diff --git a/srcpkgs/unity-session/files/indicator-datetime.desktop b/srcpkgs/unity-session/files/indicator-datetime.desktop
new file mode 100644
index 00000000000000..bc71e4da07df2d
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-datetime.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Date/Time Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-datetime/indicator-datetime-service
+Exec=/usr/lib/indicator-datetime/indicator-datetime-service
diff --git a/srcpkgs/unity-session/files/indicator-power.desktop b/srcpkgs/unity-session/files/indicator-power.desktop
new file mode 100644
index 00000000000000..cc0fb38ab885bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-power.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Power Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-power/indicator-power-service
+Exec=/usr/lib/indicator-power/indicator-power-service
diff --git a/srcpkgs/unity-session/files/indicator-printers.desktop b/srcpkgs/unity-session/files/indicator-printers.desktop
new file mode 100644
index 00000000000000..ccdb2bac6150fd
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-printers.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Printers Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-printers/indicator-printers-service
+Exec=/usr/lib/indicator-printers/indicator-printers-service
diff --git a/srcpkgs/unity-session/files/indicator-session.desktop b/srcpkgs/unity-session/files/indicator-session.desktop
new file mode 100644
index 00000000000000..2648c09e042854
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-session.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Session Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-session/indicator-session-service
+Exec=/usr/lib/indicator-session/indicator-session-service
diff --git a/srcpkgs/unity-session/files/indicator-sound.desktop b/srcpkgs/unity-session/files/indicator-sound.desktop
new file mode 100644
index 00000000000000..113fe0c3e2bd96
--- /dev/null
+++ b/srcpkgs/unity-session/files/indicator-sound.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Sound Indicator
+NoDisplay=true
+TryExec=/usr/lib/indicator-sound/indicator-sound-service
+Exec=/usr/lib/indicator-sound/indicator-sound-service
diff --git a/srcpkgs/unity-session/files/unity-indicator-appearance.desktop b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
new file mode 100644
index 00000000000000..662aa4264a8adc
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-indicator-appearance.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Appearance Indicator
+NoDisplay=true
+TryExec=/usr/bin/unity-indicator-appearance
+Exec=unity-indicator-appearance
diff --git a/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
new file mode 100644
index 00000000000000..64d67db10fd0bb
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service-lockscreen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service (lockscreen)
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity-session/files/unity-panel-service.desktop b/srcpkgs/unity-session/files/unity-panel-service.desktop
new file mode 100644
index 00000000000000..d3c115d64aef56
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-panel-service.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity Panel Service
+NoDisplay=true
+TryExec=/usr/lib/unity/unity-panel-service
+Exec=/usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
new file mode 100644
index 00000000000000..bf82892b8ef2c0
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity-polkit-authentication-agent.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity PolicyKit Authentication Agent
+NoDisplay=true
+TryExec=/usr/libexec/polkit-gnome-authentication-agent-1
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
diff --git a/srcpkgs/unity-session/files/unity.desktop b/srcpkgs/unity-session/files/unity.desktop
new file mode 100644
index 00000000000000..52e15f71068807
--- /dev/null
+++ b/srcpkgs/unity-session/files/unity.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Unity
+NoDisplay=true
+TryExec=/usr/bin/unity
+Exec=unity
diff --git a/srcpkgs/unity-session/files/window-stack-bridge.desktop b/srcpkgs/unity-session/files/window-stack-bridge.desktop
new file mode 100644
index 00000000000000..f35fd0fc10f2bf
--- /dev/null
+++ b/srcpkgs/unity-session/files/window-stack-bridge.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Window Stack Bridge
+NoDisplay=true
+TryExec=/usr/lib/hud/window-stack-bridge
+Exec=/usr/lib/hud/window-stack-bridge
diff --git a/srcpkgs/unity-session/patches/use-gnome-session.patch b/srcpkgs/unity-session/patches/use-gnome-session.patch
new file mode 100644
index 00000000000000..32eb1348d67c9f
--- /dev/null
+++ b/srcpkgs/unity-session/patches/use-gnome-session.patch
@@ -0,0 +1,16 @@
+diff -p1ru a/usr/share/gnome-session/sessions/unity.session b/usr/share/gnome-session/sessions/unity.session
+--- a/usr/share/gnome-session/sessions/unity.session	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/gnome-session/sessions/unity.session	2024-07-30 10:05:42.107319782 +0800
+@@ -2,3 +2,3 @@
+ Name=Unity
+-RequiredComponents=unity-settings-daemon;
++RequiredComponents=unity-polkit-authentication-agent;unity-settings-daemon;unity;unity-panel-service;unity-panel-service-lockscreen;indicator-bluetooth;indicator-datetime;indicator-power;indicator-printers;indicator-session;indicator-sound;unity-indicator-appearance;window-stack-bridge;hud-service;
+ DesktopName=Unity;Unity7;ubuntu;
+diff -p1ru a/usr/share/xsessions/unity.desktop b/usr/share/xsessions/unity.desktop
+--- a/usr/share/xsessions/unity.desktop	2024-04-25 08:35:39.000000000 +0800
++++ b/usr/share/xsessions/unity.desktop	2024-07-30 10:05:17.451998273 +0800
+@@ -3,3 +3,3 @@ Name=Unity
+ Comment=This session logs you into Unity
+-Exec=/usr/libexec/run-systemd-session unity-session.target
++Exec=gnome-session --session=unity
+ TryExec=/usr/bin/unity
diff --git a/srcpkgs/unity-session/template b/srcpkgs/unity-session/template
new file mode 100644
index 00000000000000..8da15186db1e5a
--- /dev/null
+++ b/srcpkgs/unity-session/template
@@ -0,0 +1,34 @@
+# Template file for 'unity-session'
+pkgname=unity-session
+version=46.0
+revision=1
+_ubuntu_rel=1ubuntu4.1
+hostmakedepends="binutils zstd"
+depends="dbus polkit-gnome unity-settings-daemon"
+short_desc="Unity desktop experience"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-or-later"
+homepage="https://ubuntuunity.org"
+distfiles="${UBUNTU_SITE}/universe/g/gnome-session/unity-session_${version}-${_ubuntu_rel}_all.deb"
+checksum=a81108ffefcf7b8e1578b9600ec26e36519e8c8a2e7e4d8e183863198be12a02
+
+do_install() {
+	vcopy etc /
+	vcopy usr /
+	rm -rf ${DESTDIR}/usr/share/doc
+	vmkdir usr/share/applications
+
+	cp ${FILESDIR}/hud-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-bluetooth.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-datetime.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-power.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-printers.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-session.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/indicator-sound.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-indicator-appearance.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-panel-service-lockscreen.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/unity-polkit-authentication-agent.desktop ${DESTDIR}/usr/share/applications/
+	cp ${FILESDIR}/window-stack-bridge.desktop ${DESTDIR}/usr/share/applications/
+}
diff --git a/srcpkgs/unity-settings-daemon-devel b/srcpkgs/unity-settings-daemon-devel
new file mode 120000
index 00000000000000..87472f2cfb2b16
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon-devel
@@ -0,0 +1 @@
+unity-settings-daemon
\ No newline at end of file
diff --git a/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
new file mode 100644
index 00000000000000..33c19afe85fee9
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/files/unity-settings-daemon/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec unity-settings-daemon
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
new file mode 100644
index 00000000000000..bd7de12cf05f45
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-Remove-accountsservice-dependency.patch
@@ -0,0 +1,130 @@
+From a287822a26bfc068cbbd5d0cac4f5655851a7170 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Sun, 8 Jun 2014 16:23:30 -0400
+Subject: [PATCH 1/2] Remove accountsservice dependency
+
+---
+ configure.ac                            |  2 +-
+ plugins/keyboard/gsd-keyboard-manager.c | 72 ---------------------------------
+ 2 files changed, 1 insertion(+), 73 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c7ccda5..824d758 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -223,7 +223,7 @@ else
+ fi
+ AM_CONDITIONAL(HAVE_FCITX, test "x$enable_fcitx" == "xyes")
+ 
+-PKG_CHECK_MODULES(KEYBOARD, accountsservice xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
++PKG_CHECK_MODULES(KEYBOARD, xkbfile xkeyboard-config $IBUS_MODULE $FCITX_MODULE gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
+ 
+ XKB_BASE=$($PKG_CONFIG --variable xkb_base xkeyboard-config)
+ AC_SUBST(XKB_BASE)
+diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
+index db214a0..9031009 100644
+--- a/plugins/keyboard/gsd-keyboard-manager.c
++++ b/plugins/keyboard/gsd-keyboard-manager.c
+@@ -53,8 +53,6 @@
+ #include <fcitx-gclient/fcitxinputmethod.h>
+ #endif
+ 
+-#include <act/act.h>
+-
+ #include "gnome-settings-bus.h"
+ #include "gnome-settings-profile.h"
+ #include "gsd-keyboard-manager.h"
+@@ -1052,67 +1050,6 @@ apply_xkb_settings (GsdKeyboardManager *manager,
+         XkbLockModifiers (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XkbUseCoreKbd, LockMask, 0);
+ }
+ 
+-static void
+-user_notify_is_loaded_cb (GObject    *object,
+-                          GParamSpec *pspec,
+-                          gpointer    user_data)
+-{
+-        ActUser *user = ACT_USER (object);
+-        GSettings *settings = user_data;
+-
+-        if (act_user_is_loaded (user)) {
+-                GVariant *sources;
+-                GVariantIter iter;
+-                const gchar *type;
+-                const gchar *name;
+-                GVariantBuilder builder;
+-
+-                g_signal_handlers_disconnect_by_data (user, user_data);
+-
+-                sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
+-
+-                g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{ss}"));
+-
+-                g_variant_iter_init (&iter, sources);
+-                while (g_variant_iter_next (&iter, "(&s&s)", &type, &name)) {
+-                        g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{ss}"));
+-                        g_variant_builder_add (&builder, "{ss}", type, name);
+-                        g_variant_builder_close (&builder);
+-                }
+-
+-                g_variant_unref (sources);
+-
+-                sources = g_variant_ref_sink (g_variant_builder_end (&builder));
+-                act_user_set_input_sources (user, sources);
+-                g_variant_unref (sources);
+-        }
+-}
+-
+-static void
+-manager_notify_is_loaded_cb (GObject    *object,
+-                             GParamSpec *pspec,
+-                             gpointer    user_data)
+-{
+-        ActUserManager *manager = ACT_USER_MANAGER (object);
+-
+-        gboolean loaded;
+-        g_object_get (manager, "is-loaded", &loaded, NULL);
+-
+-        if (loaded) {
+-                ActUser *user;
+-
+-                g_signal_handlers_disconnect_by_data (manager, user_data);
+-
+-                user = act_user_manager_get_user (manager, g_get_user_name ());
+-
+-                if (act_user_is_loaded (user))
+-                        user_notify_is_loaded_cb (G_OBJECT (user), NULL, user_data);
+-                else
+-                        g_signal_connect (user, "notify::is-loaded",
+-                                          user_notify_is_loaded_cb, user_data);
+-        }
+-}
+-
+ #ifdef HAVE_FCITX
+ static gchar *
+ get_xkb_name (const gchar *name)
+@@ -1661,8 +1598,6 @@ apply_input_sources_settings (GSettings          *settings,
+         GVariant *sources;
+         guint n_sources;
+         guint current;
+-        ActUserManager *user_manager;
+-        gboolean user_manager_loaded;
+ 
+ #ifdef HAVE_FCITX
+         if (priv->is_fcitx_active) {
+@@ -1704,13 +1639,6 @@ apply_input_sources_settings (GSettings          *settings,
+                 goto exit;
+         }
+ 
+-        user_manager = act_user_manager_get_default ();
+-        g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
+-        if (user_manager_loaded)
+-                manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, priv->input_sources_settings);
+-        else
+-                g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), priv->input_sources_settings);
+-
+         apply_input_source (manager, current);
+ 
+ exit:
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
new file mode 100644
index 00000000000000..396f2b24ceec37
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/patches/0001-usd-test-screensaver-proxy-fails-to-compile.patch
@@ -0,0 +1,25 @@
+From efd8fc8a231cd1f41aec3584760957e6778b6ec1 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Tue, 19 Jul 2016 20:23:54 -0400
+Subject: [PATCH] usd-test-screensaver-proxy fails to compile
+
+---
+ plugins/screensaver-proxy/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/screensaver-proxy/Makefile.am b/plugins/screensaver-proxy/Makefile.am
+index 73741d4..470e4db 100644
+--- a/plugins/screensaver-proxy/Makefile.am
++++ b/plugins/screensaver-proxy/Makefile.am
+@@ -21,7 +21,7 @@ libscreensaver_proxy_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
+ 
+ libscreensaver_proxy_la_LIBADD  = $(SETTINGS_PLUGIN_LIBS)
+ 
+-libexec_PROGRAMS = usd-test-screensaver-proxy
++#libexec_PROGRAMS = usd-test-screensaver-proxy
+ 
+ usd_test_screensaver_proxy_SOURCES =		\
+ 	test-screensaver-proxy.c			\
+-- 
+2.9.0
+
diff --git a/srcpkgs/unity-settings-daemon/template b/srcpkgs/unity-settings-daemon/template
new file mode 100644
index 00000000000000..05bdd44c032349
--- /dev/null
+++ b/srcpkgs/unity-settings-daemon/template
@@ -0,0 +1,61 @@
+# Template file for 'unity-settings-daemon'
+pkgname=unity-settings-daemon
+version=15.04.1+21.10.20220802
+revision=1
+_ubuntu_rel=0ubuntu5
+build_style=gnu-configure
+configure_args="--prefix=/usr --sysconfdir=/etc --localstatedir=/var \
+ --libexecdir=/usr/lib/unity-settings-daemon --disable-static --enable-fcitx"
+hostmakedepends="automake docbook-xsl gettext-devel intltool libxslt
+ pkg-config python wget xf86-input-wacom-devel"
+makedepends="alsa-lib-devel fcitx-devel gnome-desktop-devel gperf
+ gsettings-ubuntu-schemas-devel ibus-devel libcanberra-devel libnotify-devel
+ librsvg-devel libwacom-devel libxkbfile-devel NetworkManager-devel
+ pulseaudio-devel upower-devel"
+depends="gnome-settings-daemon gperf gsettings-desktop-schemas
+ gsettings-ubuntu-schemas hicolor-icon-theme libayatana-appindicator"
+short_desc="Unity Settings Daemon"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-2.0-only"
+homepage="https://launchpad.net/unity-settings-daemon"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}.orig.tar.gz"
+checksum=d02929707f36814c2847992d7d4ca0a5115943474a168fadd9ec1e7240d68c6a
+make_check=ci-skip # "gnome-settings-daemon" folder not included when running tests
+
+pre_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+files/unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	gunzip unity-settings-daemon_${version}-${_ubuntu_rel}.diff.gz
+	patch -p1 -i unity-settings-daemon_${version}-${_ubuntu_rel}.diff
+}
+
+pre_configure() {
+	autoreconf -vfi
+	intltoolize -f
+}
+
+post_configure() {
+	sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+}
+
+post_install() {
+	vmkdir usr/bin 755
+	ln -s usr/lib/unity-settings-daemon/unity-settings-daemon \
+	"${DESTDIR}/usr/bin/unity-settings-daemon"
+
+	rm -r "${DESTDIR}/usr/share/locale/"
+
+	rm -f "${DESTDIR}"/usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules
+
+	vsv unity-settings-daemon
+}
+
+unity-settings-daemon-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} gtk+3-devel
+	 libglib-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
new file mode 100644
index 00000000000000..e87ed5b9810b55
--- /dev/null
+++ b/srcpkgs/unity-settings/files/10_ubuntu-settings.gschema.override
@@ -0,0 +1,223 @@
+###################
+# global settings #
+###################
+
+[org.gnome.evolution-data-server.calendar]
+notify-with-tray=false
+
+[org.gnome.shell]
+favorite-apps = [ 'ubiquity.desktop', 'firefox_firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop' ]
+
+[org.gnome.desktop.background]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+picture-uri-dark = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.screensaver]
+picture-uri = 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
+
+[org.gnome.desktop.sound]
+theme-name = 'Yaru'
+input-feedback-sounds = true
+
+[org.gnome.desktop.session]
+session-name = "ubuntu"
+
+[org.gnome.Epiphany]
+default-search-engine = 'Google'
+search-engines = [('DuckDuckGo', 'https://duckduckgo.com/?q=%s&amp;t=canonical', '!ddg'), ('Google', 'https://www.google.com/search?client=ubuntu&channel=es&q=%s', '!g'), ('Bing', 'https://www.bing.com/search?q=%s', '!b')]
+
+[org.gnome.crypto.pgp]
+keyservers = ['hkp://keyserver.ubuntu.com:11371', 'ldap://keyserver.pgp.com']
+
+[org.onboard]
+layout = 'Compact'
+theme = 'Nightshade'
+key-label-font = 'Ubuntu'
+key-label-overrides = ['RWIN::super-group', 'LWIN::super-group']
+xembed-onboard = true
+
+[org.onboard.window]
+docking-enabled = true
+force-to-top = true
+
+[org.gnome.rhythmbox.encoding-settings]
+media-type-presets = {'audio/x-vorbis':'Ubuntu', 'audio/mpeg':'Ubuntu'}
+
+[org.gnome.settings-daemon.plugins.power]
+power-button-action = 'interactive'
+sleep-inactive-ac-timeout = 0
+
+# for GDM/DM
+# FIXME: move to :Ubuntu-Greeter once upstream supports this, see LP: #1788010
+[org.gnome.desktop.interface:GNOME-Greeter]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+font-antialiasing = 'rgba'
+
+[org.gnome.login-screen]
+logo='/usr/share/plymouth/ubuntu-logo.png'
+
+##################################
+# ubuntu common session settings #
+##################################
+
+[org.gnome.shell:ubuntu]
+always-show-log-out = true
+
+[org.gnome.shell.extensions.ding:ubuntu]
+show-trash = false
+show-volumes = false
+start-corner = 'bottom-right'
+arrangeorder = 'DESCENDINGNAME'
+
+[org.gnome.desktop.background:ubuntu]
+show-desktop-icons = true
+
+[org.gnome.desktop.interface:ubuntu]
+gtk-theme = "Yaru"
+icon-theme = "Yaru"
+cursor-theme = "Yaru"
+font-name = "Ubuntu 11"
+monospace-font-name = "Ubuntu Mono 13"
+document-font-name = "Sans 11"
+enable-hot-corners = false
+font-antialiasing = 'rgba'
+
+[com.ubuntu.update-notifier:ubuntu]
+notify-ubuntu-advantage-available = true
+
+[org.gtk.Settings.FileChooser:ubuntu]
+sort-directories-first = true
+startup-mode = 'cwd'
+
+# Mirror G-S default experience (in overrides) compared to mutter default
+# as we are using a G-S mode, the default overrides aren't used.
+[org.gnome.mutter:ubuntu]
+attach-modal-dialogs = true
+edge-tiling = true
+dynamic-workspaces = true
+workspaces-only-on-primary = true
+focus-change-on-pointer-rest = true
+
+[org.gnome.desktop.peripherals.touchpad:ubuntu]
+tap-to-click = true
+click-method = 'default'
+
+[org.gnome.desktop.wm.keybindings:ubuntu]
+show-desktop = ['<Primary><Super>d','<Primary><Alt>d','<Super>d']
+switch-applications = ['<Super>Tab']
+switch-windows = ['<Alt>Tab']
+switch-applications-backward = ['<Shift><Super>Tab']
+switch-windows-backward = ['<Shift><Alt>Tab']
+
+[org.gnome.desktop.wm.preferences:ubuntu]
+button-layout = ':minimize,maximize,close'
+titlebar-font = 'Ubuntu Bold 11'
+titlebar-uses-system-font = false
+action-middle-click-titlebar = 'lower'
+
+[org.gnome.eog.ui:ubuntu]
+sidebar = false
+
+[org.gnome.Empathy.conversation:ubuntu]
+theme = "adium"
+theme-variant = "Normal"
+adium-path = "/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle"
+
+[org.gnome.nautilus.desktop:ubuntu]
+home-icon-visible = false
+
+[org.gnome.nautilus.icon-view:ubuntu]
+default-zoom-level = 'small'
+
+[org.gnome.shell.extensions.desktop-icons:ubuntu]
+icon-size = 'small'
+
+[org.gnome.nautilus.preferences:ubuntu]
+open-folder-on-dnd-hover = false
+
+[org.gnome.rhythmbox.rhythmdb:ubuntu]
+monitor-library = true
+
+[org.gnome.rhythmbox.plugins:ubuntu]
+active-plugins = ['alternative-toolbar', 'artsearch', 'audiocd','audioscrobbler','cd-recorder','daap','dbus-media-server','generic-player','ipod','iradio','mmkeys','mpris','mtpdevice','notification','power-manager']
+
+[org.gnome.rhythmbox.plugins.alternative_toolbar:ubuntu]
+display-type=1
+
+[org.gnome.settings-daemon.plugins.print-notifications:ubuntu]
+active = false
+
+[org.gnome.settings-daemon.plugins.background:ubuntu]
+active = false
+
+[org.gnome.software:ubuntu]
+first-run = false
+
+[org.gnome.Terminal.Legacy.Settings:ubuntu]
+theme-variant = 'dark'
+
+##########################
+# unity specific session #
+##########################
+
+[com.canonical.Unity.Launcher]
+favorites = [ 'ubiquity.desktop', 'firefox.desktop', 'thunderbird.desktop', 'nemo.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'libreoffice-impress.desktop', 'libreoffice-calc.desktop', 'unity-control-center.desktop', 'org.gnome.Terminal.desktop']
+
+[org.gnome.desktop.wm.preferences:Unity]
+button-layout = 'close,minimize,maximize:'
+mouse-button-modifier = '<Alt>'
+
+[org.gnome.nautilus.desktop:Unity]
+trash-icon-visible = false
+volumes-visible = false
+
+[org.cinnamon.desktop.media-handling:Unity]
+automount = false
+automount-open = false
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Ambiance"
+icon-theme = "ubuntu-mono-dark"
+cursor-theme = "DMZ-White"
+
+[org.gnome.desktop.wm.keybindings:Unity]
+maximize = ['<Primary><Super>Up','<Super>Up','<Primary><Alt>KP_5']
+minimize = ['<Primary><Alt>KP_0']
+move-to-corner-ne = ['<Primary><Alt>KP_Prior']
+move-to-corner-nw = ['<Primary><Alt>KP_Home']
+move-to-corner-se = ['<Primary><Alt>KP_Next']
+move-to-corner-sw = ['<Primary><Alt>KP_End']
+move-to-side-e = ['<Primary><Alt>KP_Right']
+move-to-side-n = ['<Primary><Alt>KP_Up']
+move-to-side-s = ['<Primary><Alt>KP_Down']
+move-to-side-w = ['<Primary><Alt>KP_Left']
+toggle-maximized = ['<Primary><Alt>KP_5']
+toggle-shaded = ['<Primary><Alt>s']
+unmaximize = ['<Primary><Super>Down','<Super>Down','<Alt>F5']
+
+[org.gnome.settings-daemon.plugins.background:Unity]
+active = true
+
+[org.gnome.Terminal.Legacy.Settings:Unity]
+headerbar = false
+
+[com.canonical.unity.settings-daemon.plugins.power]
+button-power = 'interactive'
+button-sleep = 'suspend'
+critical-battery-action = 'suspend'
+
+#############################################
+# communitheme specific session for testers #
+#############################################
+
+[org.gnome.desktop.interface:communitheme]
+cursor-theme = "communitheme"
+icon-theme = "Suru"
+gtk-theme = "Communitheme"
+
+[org.gnome.desktop.sound:communitheme]
+theme-name = "communitheme"
diff --git a/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
new file mode 100644
index 00000000000000..e600f8aa987d39
--- /dev/null
+++ b/srcpkgs/unity-settings/files/20_ubuntu-unity.gschema.override
@@ -0,0 +1,35 @@
+# Part of ubuntu-unity-settings
+
+[org.gnome.desktop.wm.preferences]
+theme = "Yaru-dark"
+
+[org.gnome.desktop.interface:Unity]
+gtk-theme = "Yaru-dark"
+icon-theme = "Yaru-purple-dark"
+cursor-theme = "Yaru"
+
+[com.canonical.unity-greeter]
+draw-grid = false
+theme-name = "Yaru-dark"
+icon-theme-name = "Yaru-purple-dark"
+
+[org.nemo.desktop]
+font = 'Ubuntu 11'
+
+[org.nemo.desktop:Unity]
+home-icon-visible = false
+show-desktop-icons = true
+trash-icon-visible = false
+volumes-visible = false
+
+[org.nemo.icon-view:Unity]
+default-zoom-level = 'small'
+
+[org.nemo.preferences:Unity]
+enable-delete = false
+
+[org.nemo.preferences.menu-config:Unity]
+background-menu-open-as-root = false
+background-menu-show-hidden-files = false
+selection-menu-favorite = false
+selection-menu-open-as-root = false
diff --git a/srcpkgs/unity-settings/template b/srcpkgs/unity-settings/template
new file mode 100644
index 00000000000000..46864d634a7dba
--- /dev/null
+++ b/srcpkgs/unity-settings/template
@@ -0,0 +1,20 @@
+# Template file for 'unity-settings'
+pkgname=unity-settings
+# The files do not have a version, but we are using 22.10 because it is
+# specified as such in the Arch Linux PKGBUILD script. Do not expect the
+# version number to change.
+version=22.10
+revision=1
+depends="glib ttf-ubuntu-font-family unity-backgrounds yaru"
+short_desc="GSettings schemas for Unity"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://ubuntuunity.org/"
+
+do_install() {
+	vmkdir usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/10_ubuntu-settings.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+	cp ${FILESDIR}/20_ubuntu-unity.gschema.override \
+	 ${DESTDIR}/usr/share/glib-2.0/schemas
+}
diff --git a/srcpkgs/unity-tweak-tool/template b/srcpkgs/unity-tweak-tool/template
new file mode 100644
index 00000000000000..d435f6b7ceb876
--- /dev/null
+++ b/srcpkgs/unity-tweak-tool/template
@@ -0,0 +1,27 @@
+# Template file for 'unity-tweak-tool'
+pkgname=unity-tweak-tool
+version=0.0.7+
+revision=1
+_ubuntu_rel=0ubuntu11
+hostmakedepends="intltool python3-distutils-extra wget"
+makedepends="python3-cairo python3-dbus python3-gobject python3-xdg"
+depends="gtk+3 hicolor-icon-theme notify-osd python3 python3-cairo python3-dbus
+ python3-gobject python3-xdg unity"
+short_desc="Configuration tool for the Unity desktop"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-or-later"
+homepage="https://github.com/freyja-dev/unity-tweak-tool"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity-tweak-tool_${version}.orig.tar.gz"
+checksum=5d37ec2b57f88a22b2bc2e1cc2d2f37677989b5a585c96d3914adf6a045831c5
+
+do_patch() {
+	wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/unity-tweak-tool/${version}-${_ubuntu_rel}/unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	vextract --no-strip-components unity-tweak-tool_${version}-${_ubuntu_rel}.debian.tar.xz
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+}
+
+do_install() {
+	python setup.py install --root="${DESTDIR}/" --optimize=1
+}
diff --git a/srcpkgs/unity/files/launcher_bfb.png b/srcpkgs/unity/files/launcher_bfb.png
new file mode 100755
index 0000000000000000000000000000000000000000..ed34d050a415919bf2dedbbf50d4528b543da35f
GIT binary patch
literal 7378
zcmeHMg;Nxa(>@N4I9j?>Bn1>f`i|~68U#dAQbIU5;y9E>5JWKuN%82eqmh&@LEtFq
zIO#a}eE*K`w==stJG-+x^UTif>};HofhHxG6$}6XD7CfJVE;7oKPDyoCy%jjFa9Y4
zf0(8U!LNSNh<^sz3oR@Ef59{VF@cKUXE*==#2M+Cs{eD|{*V5L!2cTr%Am`i{x$to
z0L;JyKma5p0uhstl7Y!7D5<DvXz$R`GcYpq3fyC2;Sv&NXJz9Q6%&`>=a78B%_H?l
z`Z1q~tlZuE3W`d~f>2d84RtLu>!+^XzJC7C&Goc(G;MvtB2llRW8>lz-z2A`zDs|f
z@#(Xdfqp=6NN9Kj+}+LDB`E1bR!;6iL!+00j!!JD?ChU8d3fd(X3M}{*qE4FIHVO6
zs~CSl=OatL=^~=a<jcQ9zE-wQOfIiZjW@sU+`3(_EsCigyuchE)m4-pRQ2Ki^!Kb>
z|ENjW>up+`zS_U+YG~YU8MxW_+x>HHc5LnA=ILSk@W{^D%x(u3xA1Ez^KIKnJrpQi
z0{}4lYpX#`;a^HWlfmEhEVSPq?WZeNeRfpsQ`h2tLJ-A6MnFg)1_cq&hN^ul2%FR~
zu9-5Q3>UNB@v0U6U|m}a6UpWOLTRM+cs-Sk(t_&Fohn)B-aoUBtsjFAf`aHg<%6pZ
zJX155Zt*`Ao1uq<cU0P2-!ZA%g{wSxjO`T#z4G}>Q#HgDPfZ)e>T?(w=^{Dv^+(#V
zJ<;eHMi)*<qd?j23K`w&&<Vx1k>(sAKD4SS5J5JQxRo2I@WKsm0iC{PFIKWvC?U8%
zcAM)Z$WMq%v(X5E!<Vxt5)wa60{1P_Z>-N=5aB_i8yLQ=Ga|#^CM_&*1u2veE7YX9
ziRY#raM^NJ0VgpE<%O55)l+(Xw?2mw9MA886g+~Fu?Pmv-Q6>>lke6II6ye0{=;Fn
zV$VHb&rFJE4dF7eg*~{Fh^BS$_3kMRYc|!?SRm5cf(xudO!Fg{Yaz?$9Qh4FX0Olr
zr4JP%(h?s%8v(ers{eosOu=C_d^KL!!=$^zf#=E1ih}<oZthpr^Wa6jIiRPk906Q5
z1UbbgtE+TADJN?b{`uW|L?)Dy(>f)XMn!Y3QwZ|)aE>|Pw8o8|_d+grEKbh34ecOC
zP2+2b6I+9lyb*mI297b#A?2>|zwiEH2(nx!u0{b22$TYwI>7^`v!YEeSDQ4t&PtbY
zq%K{JddDLnJ+aIWkfU8mUQW{&Qm!A?hqy@`(wV*tX*ipN=$AeG$iRZztU}Lw>hUm`
zSeZ}*vuYI}-I&-V3hJ8fn$TS;j0DtgkQ|o6>e#gRHx@RCrT<&v6i6<dy{sf#=4sC6
z_jTeUGqGJ+RS3<1tbOcgWsRW%YYP=~78R@V*`|^*TZp*^P1$_1=r-6?Z_Y!sfhHkU
z{^ahTTt>UdJpHdZIrNl)ycS2Muj;~<Ixacfa21=?EeS@yX#C8n9<FVrk}Sr5;{NrL
z6_i@>u)yS=@F)*7l1J4vWqbE;NHw*A+724=?))b=7V6qk?mSwR0^Yoognx>|J0mXM
zDL&NMrGfaj>I8tn)=>1*`g98{F6T*&&$#T7`S<}O(w-=LtY|Pa8+sOJ1hy<;1+fG(
zkq6WrjPOut*8bYR(J`vX(?TOB3Cg*LS5H!B><qbVL;BTq^2H20`7DV=8s`a(+sI#8
zW^iNbE;)*6)6NW(#=&Q|gkJ?qQCjsmIa@XPNZoY?c90t;&(#E!d~g4*f{=nVwUQfE
zr392%|K#3KkoPAHns#)2O0Wg^K`0-HtTZ=m<syf>f52Yg*6Q%9x9rc%H8j$1`;I%^
zzCFe`-F?o+ZZhgZM<2ka4ZSF-00ZQTnx}(n;Fe7xRUm0oqLG2V{F3mUK8MPb>sBf;
zoBm>k?z=H&5*SmXlwKgRP<}Y<VN`GVT7n%It^N8_A?I(p62M32+h~4QCzUV;yW@}h
zzPZ@3sZ^9tMGiMp9QaMqj<*Y;)C<xu6PdG&c@aV6&IIA-?HV}5AHBS@0|lq3e~*l<
zA-!MaJKzEnHm(4JL}t5*^EwHKiw*KKducDLyac!aQhNI6new#*z3#NfCm&-BL1KC-
zX2;pryVkF)LpD+XjA4cL0)nFswW!1`wm&?RgkMvO(fKdA2b0#H*dQk16vnGm`tV0?
z<{HvpiA8-%G+G75y<B_<N>P2XEvUUQS#8`m5&ld=#^Z2NjNj@A`*y+k6||f1_afNd
z)Xmk|X#=k*;QQo*d?9GdHO81GNYrDfUmhQ}Y(?5Mz_*r~Fn81Vs@K2$&`X+m+{#xE
z4Uo-1N*VM92YAy@4A5VnKZHhJaiM_qVx5ZlcZ*B86!cH$#OVNqJuP@XmL+0o;b-Hg
zKG&=u!FVw9RPju0J)i4mYl3=HBbtwoChI3|Ezw{#Mr|)9^n^$?F<%v>dEt2zhm%q0
zvnwhi>_)pqy;qFM-lx}OyjL<3l-T3_H^;0+pHBeLNGdWg`*W7Mp=5b3w24HjIW?ly
zHiS{qX*m-U&wXd98ekdYxoxz<LspibEn6%r36;#h?cIKyx$hqGh~>jwP&Oa5V<W-G
z{d|r+gI0tPmbJ7*<D?X*?ofNoe=@2KalBn111k_0)r$N%`?LzAPaqC?8KPQ*A>MkM
zgB;?nLXAH!9B=TTMiiI_?p<dq@Q5s>$Oju2oOhpktE}>gUql{1przg%o%JWl7kZnW
znlj;n4dB4Uamw7G-+T+}z+FuvBxKMwf-;n)w~jtq3i_8U<xd!TW51$-3ulu)`RDvk
z&z&~C12g3c%#o?Gbla6O0wI%Nt%vzctJfuG9543l&_?b*j%<EA;H0b~q<i?CVieP)
zDn$(=4~T4oJ2%(2>FC})m4XveO)|qG4?=DR2mnFaH-n3RPx|i(Rqi5qW-3P%OFPwZ
zq|BTh3`<Cvse1x~#)i}U7~?9`ETcAbc$bxq#jJ`%tH8!QV!?;#bl(2*&4^j%h|)}1
z`v(Zre+B)o#vNow`A#~0ccU|?k{NgpF!w=NE@K^&8qOyXo?_ecptxKSw;&r`l;%&C
zk?`qrb+%D<Mh+1<RR#hCQvD7B1?cExX4R#e!n`|zowxF`nj%ScQqM`BEoR}j*a>{1
zd8_OKZRO{_!;r+=l!6cjW(W+@yZUpw@eNF_UNP9*_7b_Y|F>H2`h4=*hUR;joTb0k
zLs8}p(ps8Xbb<+%R%$A<)I<n^dn$1U<dSb(@kl;GQ$eWnp#>tM*kkbw<%OG=5*ts}
zU|%|mbN?jq^FlIPC>yt;M_?HJ+fQPyPzfz3t45g8fz-q3MYd{~OE}+bKZZfPHT+YS
zCm(SQM_9^>C541z{NV97eeGqAW5aFz=Pdgs(O=Q;NTm4zQHE%wfi`(eV@CJIH8LAN
znXo}m3uleW1#a3QDpbRz%g%|KrTNQ5bN5*|4gO?)X;69T7rT<8L6DjH?3f%aw>9W*
zGV4`<Ummm{B2&B(9&gwfxZgkWM=|2HonKveIC;+q_vh)fl!eJr+vs$#7JxV#qz&GD
zr$(P|xIRlcgq^q99}Se+O2-b2=F^_e8|WJHDzC+iP#tL#Wb3mzbh%Aw(L)TJj>*7J
z;&M?P3H9m|Of$-Zg;?YAQl4ZMw2C+={rUCeL)gvRD=Ybadpn`!K|qg{j25vaAODVx
z9W+K2MpL;$Z+~JNR6W?Z?n!B56k4%F`d2`!_Nn0V2@BN~=vvgxqlvT8Zh_MAEsTI8
zdBUSm+-awYU2v@zxkO5N_$L#uA+b^*p8x*w1~ibR^?7-0%;KrWd`O8Wkzh1AOhVRu
zd5}JWKbZ@L*oaFw{}OS+*3m!`7;80AOL&}mIv`<6OyPt2QTQWo+nYHG4w@AeVn&SA
zMG_@<$bV)C*zzqt=j#yR@!AfDY~PO<dd75ik9QFi`M$&gr~?v=_AaGZ(}f{9&+D+H
zAJr%iC(uLN`mnel{F9!6h(GaM0Y?W5<(FGb5p@2QcRefgmOx$@2yXMZbV)rzV}rYq
zZJZD?%q{rTWSm300GGiTrNT2G!Jww?+<YbsIc>X*^7(#B7NPk4JlG(*#=7)dPV#v`
zGBRdJSo4zA2Qo&z`Q6gAePrNLGWed*B9QLl`N1Z*vgP;EU<SeI^GD-pW8wnBg}V_L
zkw4)tMVdnusGg9Latc>@RNEcFKrop^6;_b((ZH$@XS2f5uR;6AqVMb7Q}kFu>iynx
zRxN+O?ncyS42GuLPE$IagZq$+S*Z0(J9Rz?)f<ke0q~#2&>s+-(aEaT<@Tn~3Mx_F
z>h6`j;F7Zci<~C|$$}*eezfa)dS0)QG3O1cuMM}-!6}4s;6zV{XIVb2Z?s>V5rik6
zC`qY`&R)b(C{(jgZW(s1U6b@Y^Cq<UYHiPWNUGtzIKONr3<>NO$uYTOCb9OOkB^zN
ztJ(7<i#$}+tJD7uFQ4WjBbm-=AKSf|XOcmEJ@N3j*wy~00W1nlnAyA{pQp%C%Dol>
z{^5bBDvBhtjN?vTX3zZcK)pM<&3I$7N}TFwVNpR_)V6(WBgT{VK$aVeE*Yb<>$Ec_
zct|6}N<*&@){?b+2Hp7Jd_2{|rR74$-;G-Wfey{1-|0754JrDQhlz$Jub|t(3y!(d
zekh<4@g1a2Bz{`No0Ga&<jsTyS2$EO>0n9}W5-C3l=wR#C8;q~s-K&DE}ASZ$l)$;
zKc-6mw3wEg4JIt{^CalW8gA>w8R&954fgY3zoi3EINQx`FV1Jbjzi|UV3xO5LNHZ8
zr*$Wgla6q_lJg%N^ZPxQS(&MVO8Q)|`I^?RWtdlsbi5Md@G8!U4!huW?5_jri&q1A
znh#gj1{MN)WZIpkN$X4Lb$6O+Ta{n~+xs;Bnmb#08^RKy?q6P>P2JDaA*hm2AVHyo
z6wL`D2smBmvE@p4bO&!sU-cO_S9)6x#K(qZWf2yj{N1`D6TAyh07{5Eky;1#?Y?Kb
z(=Z0mg>|TFh#O(hWjlO3M9vyZAA;>ldbSU+(WJUojwUfpYnz^Tr>7?+9#Y71G)Wa#
zocPkWI?~Cki1we5s+96BZ(-=~H>2)xJRMZ^J;tmUu{UO7a`6+UP3k9bV*3j@sv~fP
z#bz|^7Z`LAz;@?Qts7`Q5W3~G?<4s@@`AJH4m(U*NFWdA`)vP@a)s`?RXmB0V@F7k
zExQ@AB^O8^`3{_=<nW!7nBw5oCGY9qn1TV!I?Klg?MjArfaHrPKe@#wogw{*L|Y{e
z1DqXvb&T-6Tmi630xG~MuBV-sN@<QN(qvT}z1iit^uzDL#_Tl&_vJS3kzC+EhV?|P
z$7fRyr<ofqRW&hRSVU_kO?cGRSxJF6eHE9eXFJz!rk9&REn`%Tp2Ct0+A&u?R3y$#
zJyL@t)jJ>1ADnik;~LNLo(LHyN*aZ={h+es=Z;`c+f<;FTD(TPn2a}@0ZyYrm2Ak+
zX}wP*mCgFy{dcG0{t-X!_Z;i*|ITZSvcF<1N+JE?4gI$jv;e8VRKJz&qS$kl>q+%G
zV5LF2&d5!L0r{jr9m2IgH1_0OO<s(Dq$q21ZySTZtd%*|ft;?21}2=bM9b8F_}WQA
zZm~An$CbLTxijcTEz!eAwCso!dp)HGX}06kCJIu+4aeF8&f3sq2@yWbt0L;7c})k}
zY*3TJjolg<ZGgD*DH9-H>B5IK66Y087JM|gn|kL&L!6U7AF#y$f3?5m+0BjRs3^#f
zsVz^m@hBL7$wfh`;m#+Br~Jh@e9f>!$%6Q$G_QzpsO?f`IENGiwjMk4!T;)omb}WQ
z2)-X~Sh4Kb7_guV!cTYh^;}h8LbwL)<+Ztbi381~=l>xmcUKa$3$gSjYExk1La-Al
zVDZWWuC`&n71RwUFlM7Zx<fY??-94j97Yu3Sy@uHgC0q?ONr_rJ5fPyvv!^W6axvd
zIqfxL4m>tGQ6yB6)fLXrlYA~^>XXP?JlpstG*nXA&8%`yb;EG60h#v^r7QGb)#5`^
zF$@-?-L9D?+v4%-26sJn@T<tI;t}~NN>1OpMrd*|csyhd_{oLqcO2eW4Z6ym1Z2ok
z72n(6OvgziRPVa>2Jp2a{Og<6;*u%eepcCDO#a2DJ|D$93mJLNdN7wt%!Ys5)c@72
zeR0I(II4T7+wxBq*7a@Tk{SNDvpMXzdd``f>8j|*(V1p;+i6da%QC=W)LyFSaU|^T
z=nKS=Mdrf<XAl*+38aXhD{R8Rn4Ih*nE_}K+>_wh=;=#Q7^I6LA}PSNnS?={);@CZ
zkJ9eh%t>Sw8@DqGNC9e5^~t^6@9vx_+z9it1>)DGl&3!3G!)&EK3FtYOOZRC0h|O0
zw1jUgX#;v@nZ$&!uFf3fkOJ&hQ$`s50ZIHl8&mv{Sd<2CU0vCN@o!q=_Zsh(77ry0
z{khlT6^+wvDQehW6p-uR1f@PA5M*76*S(YiaYp)EK7V%{t$w76&z=kuEsbd?bqbT)
zfPdQK2+b~OPq+*E(!n;Oq@K4)V&zz-?*ea9)i9E0D*N5^)jRI|{n)0L?&a$IkV@H6
z0+AbHGfG4$<RBNA=nV1__`SM8nBvh9QvXmuC31-r4xN9#Uz@2?Ji$3<#zw3^kz#+J
z2JuWy8$kK#a%>9%5T`8WE*|7MtgkfTwj$`&?^Ad?a#-7b$nj#nyN+WftC)!;Egb*y
zTb}!;RPPW&cfgx^I@W}cvR--fXMqRg%Ai^xdS>G+z<~!~)nQ`iUliLr3Y{iSdF#un
zdg>PZ>$&9<uHUSUwDxxIv-00(Z#*zrv3JAxETpD`K}w>6THbY_>q6o7PR+)(@RUbQ
z4gkT!QY7c${Yy&7;Der|qShy2dKXGfV$X;9dnOu!^5(d%Jur(L?d0@e7kY9q?EXA^
zD{_lhi=YqB{Z}BPPBShBpf|Xv@0K(;RqOMh2;&(a7%;6b=vE5D3$)(9V4DbWjKMHm
zFp+{o$?yK#Me&KpS0x*LPx*)d@!^M0{pRa)+8r$ct^yyo2zGa73{`KR4~#!S7*3>L
zC++bApdI3iZ|O&Ivp!_!Y;qEcBzFi?*gAglxxXBRez)r^x2X!*oYW7nF3(o_TE!K*
zGJHVJ7NCD$Dx8mzp(SPt%>D<GQ<urvtwkV6Kbr;UvWvcV#TXrvUh&OuR{9i2v%j@}
z6o%FGmJzTom$WID&Yf#S0bA6JAp0MLNAZD_r}Z-cI%EOB31rCGuUz;eO<8JbU!lV=
z_{6w+$U&(a<?FoN{LO>$O+$Q_(5zb`a2M^pf%5}!pGA#bxbn@hgmaL>DRkS|#_>Kk
zd=FBpW$`_%r7@m^7R_uvLZ1`!bc-C6%dtCDr9g%1p<kSv#kALhUjHtU*32`=zzlEJ
zZCAkoz(DxH?iy3KtY$@rvGHj7XZO;BrcZ3fuczT58uGdVTqAxpgi5*Q$jTh-h?9aw
zF=2V_M)^rRTpbW^b&=`OjHrPhivO<J>vO-y)!`7;F>d+VcdQLI;oJ4vfj#i_u`alB
zsq*d@6o4i1n%e$#;iW1kt%0~7pbAxUm4o)|*SQgY4@{0}Q|(S^)>$BH0VaT&zXR2;
z<ch`t!*AmDB<DaN;{p__sWBDUL~Yj;;!aVs+ccZkE;5INb?mTtmLVApZ{Y(AOYC1M
z2^^u31!+QuZ^+DzR$(H@hWYpdzc61)r^nw2Q?8)9QAUXPYf#q}w7pADkkfKabVrZ0
zs6FW}NC};TBrF8v`VHPo7Z0z}O|qyX=;>5DQz5Tc<X)9Lgs-f8-EL`G9ZmsPD7K(}
zaULF2XS%_<rjm?gMW~aBcUpo-4Sz6Ae9sv?X&4&%tDRwC6n7Vtmx)4!rPYGxT)aM3
zx%#cy{Di_^G6=e^|L)uzL6BuNSuB6<*JTV`syvCGcq-9M1UktvGg8nsYVVj7bJG)D
zG_ycsf=avybwIc%o(MGZ-o8-QJ|pQOlu?9MS$zy1)DmTZ)teFKe%UVK#%eq*|NKBA
z0H@=8h^ZDICE^ycoLUq2o>-AIQs5-|AeKBLCVjli^3v24ISdBBagGB6W=uokTXk;>
zTfa(9VhC@I?@z&n#r4<|96!}xMlR!XItUF2w6sE2F^m!VyLYQqI<i#kI^sV6j<QyC
znMp?$T&ifDjBCpAyaWDKbZ1>uHtwW5qfdsm*GGc3b2apoe0#MYber~kmcuj3acA{+
z8!cqgLUx&JT2E5tY5p!UWQ!2LB>L+n<wEhrJMs`7%cuNO^LOC-%>r@splo7+RCOz2
zWSz=B12Gfcq*MdEI@HQIj*Knhisgk<fLquS*U$-3Y7x^@Swr!Y!cS&j=LX$B_gD3J
zfiQW(9SYC^#l_JyFfzQVM*^36l&UsQP@FA(^Wd%?*x-%`pvM3=MtFF5VAaM4U$Of^
zcP4|PW{8&t;Xfxo%X1HP74zP3Qg~V3gNR(dYCd~$ZglIKKPxn6BJ1YkB4*fK{hmYv
zc4Do-_TZ}NY*c;+ds_qJWXgXGsIQCumyBLq%=@zStm5ht3own*5R#_&X*>|#%i791
z;(gx<LB4+~Lxa5Rb_$>l4lZIHvF3zZ4btJlWbjI`ZxMke918_$CzWO9Q+roG&KCB3
zL;+@EiM+aQ^|r5X#hdU+L^*PjJWGYl6q%8?#`SF-0MlB4IXSk^{Ps3~e#r=64eCps
zO~iz-x6a3yzTi8rAo#|{8-L7aeR!KQzhnu>`H_}CF;-W$Ieq)Qo?7RYx|V)q`mFy|
S&%ZAWKwI5FtxV-9>i+-@YJ#Q!

literal 0
HcmV?d00001

diff --git a/srcpkgs/unity/files/unity-panel-service-lockscreen/run b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
new file mode 100644
index 00000000000000..fa10e763977764
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service-lockscreen/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service --lockscreen-mode
diff --git a/srcpkgs/unity/files/unity-panel-service/run b/srcpkgs/unity/files/unity-panel-service/run
new file mode 100644
index 00000000000000..ee7980b736ced6
--- /dev/null
+++ b/srcpkgs/unity/files/unity-panel-service/run
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/lib/unity/unity-panel-service
diff --git a/srcpkgs/unity/files/unity.pam b/srcpkgs/unity/files/unity.pam
new file mode 100644
index 00000000000000..ceeec501e192b8
--- /dev/null
+++ b/srcpkgs/unity/files/unity.pam
@@ -0,0 +1 @@
+auth optional pam_gnome_keyring.so
diff --git a/srcpkgs/unity/files/unity7/run b/srcpkgs/unity/files/unity7/run
new file mode 100644
index 00000000000000..35e0e62c738db5
--- /dev/null
+++ b/srcpkgs/unity/files/unity7/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/lib/unity/compiz-profile-selector
+exec /usr/bin/compiz
diff --git a/srcpkgs/unity/patches/0004-Remove-social.scope.patch b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
new file mode 100644
index 00000000000000..3919a7f5eadce2
--- /dev/null
+++ b/srcpkgs/unity/patches/0004-Remove-social.scope.patch
@@ -0,0 +1,25 @@
+From 67ad6e4de6ed5771627c9e2c4a77bcff19cd3e60 Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Thu, 10 Apr 2014 20:17:50 -0400
+Subject: [PATCH 4/6] Remove social.scope
+
+---
+ data/com.canonical.Unity.gschema.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/com.canonical.Unity.gschema.xml b/data/com.canonical.Unity.gschema.xml
+index 189e705..65c7278 100644
+--- a/data/com.canonical.Unity.gschema.xml
++++ b/data/com.canonical.Unity.gschema.xml
+@@ -188,7 +188,7 @@
+   </schema>
+   <schema path="/com/canonical/unity/dash/" id="com.canonical.Unity.Dash" gettext-domain="unity">
+     <key type="as" name="scopes">
+-      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope', 'social.scope' ]</default>
++      <default>[ 'home.scope', 'applications.scope', 'files.scope', 'video.scope', 'music.scope', 'photos.scope' ]</default>
+       <summary>List of scope ids specifying which scopes should be created and the order to display them in.</summary>
+       <description>The scopes listed in the scope bar will be ordered according to this list.</description>
+     </key>
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
new file mode 100644
index 00000000000000..6fa9e71c2da099
--- /dev/null
+++ b/srcpkgs/unity/patches/0005-Remove-xpathselect-dependency.patch
@@ -0,0 +1,563 @@
+From 46aaa3f1bb103cea0cc8da7c9b1b8715f0f2971a Mon Sep 17 00:00:00 2001
+From: Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+Date: Mon, 29 Sep 2014 14:49:09 -0400
+Subject: [PATCH 5/6] Remove xpathselect dependency
+
+---
+ CMakeLists.txt                        |   1 -
+ plugins/unityshell/src/unityshell.cpp |   1 -
+ plugins/unityshell/src/unityshell.h   |   2 -
+ unity-shared/CMakeLists.txt           |   1 -
+ unity-shared/DebugDBusInterface.cpp   | 431 ----------------------------------
+ unity-shared/DebugDBusInterface.h     |  45 ----
+ 6 files changed, 481 deletions(-)
+ delete mode 100644 unity-shared/DebugDBusInterface.cpp
+ delete mode 100644 unity-shared/DebugDBusInterface.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4358c3f..7c8fa85 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -250,7 +250,6 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     nux-4.0>=4.0.5
+     sigc++-2.0>=2.4.0
+     unity-misc>=0.4.0
+-    xpathselect=1.4
+     zeitgeist-2.0
+ )
+ 
+diff --git a/plugins/unityshell/src/unityshell.cpp b/plugins/unityshell/src/unityshell.cpp
+index ca920df..ff3b476 100644
+--- a/plugins/unityshell/src/unityshell.cpp
++++ b/plugins/unityshell/src/unityshell.cpp
+@@ -196,7 +196,6 @@
+   , WM(PluginAdapter::Initialize(screen))
+   , menus_(std::make_shared<menu::Manager>(std::make_shared<indicator::DBusIndicators>(), std::make_shared<key::GnomeGrabber>()))
+   , deco_manager_(std::make_shared<decoration::Manager>(menus_))
+-  , debugger_(this)
+   , session_(std::make_shared<session::GnomeManager>())
+   , needsRelayout(false)
+   , super_keypressed_(false)
+diff --git a/plugins/unityshell/src/unityshell.h b/plugins/unityshell/src/unityshell.h
+index 43df66e..03a8675 100644
+--- a/plugins/unityshell/src/unityshell.h
++++ b/plugins/unityshell/src/unityshell.h
+@@ -64,7 +64,6 @@
+ #include "PanelController.h"
+ #include "PanelStyle.h"
+ #include "UScreen.h"
+-#include "DebugDBusInterface.h"
+ #include "ScreenIntrospection.h"
+ #include "ScreenSaverDBusManager.h"
+ #include "SwitcherController.h"
+@@ -340,7 +339,6 @@ private:
+   lockscreen::DBusManager::Ptr screensaver_dbus_manager_;
+   lockscreen::Controller::Ptr lockscreen_controller_;
+   ui::EdgeBarrierController::Ptr edge_barriers_;
+-  debug::DebugDBusInterface debugger_;
+   std::unique_ptr<BGHash>   bghash_;
+   spread::Widgets::Ptr      spread_widgets_;
+ 
+diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt
+index b0ac7b1..2b61100 100644
+--- a/unity-shared/CMakeLists.txt
++++ b/unity-shared/CMakeLists.txt
+@@ -23,7 +23,6 @@ set (UNITY_SHARED_SOURCES
+      CoverArt.cpp
+      BackgroundEffectHelper.cpp
+      DashStyle.cpp
+-     DebugDBusInterface.cpp
+      DecorationStyle.cpp
+      DefaultThumbnailProvider.cpp
+      DeltaRestrainment.cpp
+diff --git a/unity-shared/DebugDBusInterface.cpp b/unity-shared/DebugDBusInterface.cpp
+deleted file mode 100644
+index 73bea0d..0000000
+--- a/unity-shared/DebugDBusInterface.cpp
++++ /dev/null
+@@ -1,431 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Thomi Richards <thomi.richards@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#include <fstream>
+-#include <iostream>
+-#include <sstream>
+-#include <boost/algorithm/string.hpp>
+-#include <NuxCore/Logger.h>
+-#include <NuxCore/LoggingWriter.h>
+-#include <UnityCore/GLibDBusServer.h>
+-#include <UnityCore/Variant.h>
+-#include <xpathselect/xpathselect.h>
+-#include <dlfcn.h>
+-
+-#include "DebugDBusInterface.h"
+-#include "Introspectable.h"
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-namespace
+-{
+-
+-DECLARE_LOGGER(logger, "unity.debug.interface");
+-
+-namespace local
+-{
+-  const std::string PROTOCOL_VERSION = "1.4";
+-  const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
+-
+-  class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
+-  {
+-  public:
+-    typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
+-    IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
+-      : node_(node)
+-      , parent_(parent)
+-      , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
+-    {}
+-
+-    int32_t GetId() const
+-    {
+-      return node_->GetIntrospectionId();
+-    }
+-
+-    std::string GetName() const
+-    {
+-      return node_->GetName();
+-    }
+-
+-    std::string GetPath() const
+-    {
+-      return full_path_;
+-    }
+-
+-    Node::Ptr GetParent() const
+-    {
+-      return parent_;
+-    }
+-
+-    bool MatchStringProperty(std::string const& name, std::string const& value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a string property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetString() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchBooleanProperty(std::string const& name, bool value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
+-        {
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a boolean property.";
+-          return false;
+-        }
+-
+-        return (prop_value.GetBool() == value);
+-      }
+-
+-      return false;
+-    }
+-
+-    bool MatchIntegerProperty(std::string const& name, int32_t value) const
+-    {
+-      auto const& prop_value = GetPropertyValue(name);
+-
+-      if (prop_value)
+-      {
+-        GVariantClass prop_val_type = g_variant_classify(prop_value);
+-        // it'd be nice to be able to do all this with one method.
+-        // I can't figure out how to group all the integer types together
+-        switch (prop_val_type)
+-        {
+-          case G_VARIANT_CLASS_BYTE:
+-            return static_cast<unsigned char>(value) == prop_value.GetByte();
+-          case G_VARIANT_CLASS_INT16:
+-            return value == prop_value.GetInt16();
+-          case G_VARIANT_CLASS_UINT16:
+-            return static_cast<uint16_t>(value) == prop_value.GetUInt16();
+-          case G_VARIANT_CLASS_INT32:
+-            return value == prop_value.GetInt32();
+-          case G_VARIANT_CLASS_UINT32:
+-            return static_cast<uint32_t>(value) == prop_value.GetUInt32();
+-          case G_VARIANT_CLASS_INT64:
+-            return value == prop_value.GetInt64();
+-          case G_VARIANT_CLASS_UINT64:
+-            return static_cast<uint64_t>(value) == prop_value.GetUInt64();
+-        default:
+-          LOG_WARNING(logger) << "Unable to match '"<< name << "', '" <<
+-                                  prop_value << "' is not a known integer property.";
+-        };
+-      }
+-
+-      return false;
+-    }
+-
+-    glib::Variant GetPropertyValue(std::string const& name) const
+-    {
+-      if (name == "id")
+-        return glib::Variant(GetId());
+-
+-      IntrospectionData introspection;
+-      node_->AddProperties(introspection);
+-
+-      glib::Variant value(g_variant_lookup_value(glib::Variant(introspection.Get()), name.c_str(), nullptr), glib::StealRef());
+-
+-      if (!value)
+-        return nullptr;
+-
+-      if (!g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) || g_variant_n_children(value) != 2)
+-      {
+-        LOG_ERROR(logger) << "Property value for '"<< name << "' should be a 2-sized array, got instead '" << value << "'";
+-        return nullptr;
+-      }
+-
+-      glib::Variant child(g_variant_get_child_value(value, 1), glib::StealRef());
+-
+-      if (g_variant_is_of_type(child, G_VARIANT_TYPE_VARIANT))
+-        return child.GetVariant();
+-
+-      return child;
+-    }
+-
+-    std::vector<xpathselect::Node::Ptr> Children() const
+-    {
+-      std::vector<xpathselect::Node::Ptr> children;
+-      auto const& this_ptr = shared_from_this();
+-
+-      for (auto* child : node_->GetIntrospectableChildren())
+-      {
+-        if (!child)
+-          continue;
+-
+-        children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
+-      }
+-
+-      return children;
+-    }
+-
+-    Introspectable* Node() const
+-    {
+-      return node_;
+-    }
+-
+-  private:
+-    Introspectable* node_;
+-    IntrospectableAdapter::Ptr parent_;
+-    std::string full_path_;
+-  };
+-
+-  namespace xpathselect
+-  {
+-
+-  struct NodeSelector
+-  {
+-    NodeSelector()
+-      : driver_(dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY))
+-      , node_selector_(driver_ ? reinterpret_cast<select_nodes_t>(dlsym(driver_, "SelectNodes")) : nullptr)
+-    {
+-      if (const char* err = dlerror())
+-      {
+-        LOG_WARNING(logger) << "Unable to load entry point in libxpathselect: " << err
+-                            << " -- full D-Bus introspection will not be available";
+-        Close();
+-      }
+-    }
+-
+-    ~NodeSelector() { Close(); }
+-    bool IsAvailable() const { return driver_; }
+-    operator bool() const { return IsAvailable(); }
+-
+-    ::xpathselect::NodeVector SelectNodes(::xpathselect::Node::Ptr const& root, std::string const& query)
+-    {
+-      if (!IsAvailable())
+-        return ::xpathselect::NodeVector();
+-
+-      return node_selector_(root, query);
+-    }
+-
+-    private:
+-      void Close()
+-      {
+-        if (driver_)
+-        {
+-          dlclose(driver_);
+-          driver_ = nullptr;
+-        }
+-      }
+-
+-      void* driver_;
+-      typedef decltype(&::xpathselect::SelectNodes) select_nodes_t;
+-      select_nodes_t node_selector_;
+-  };
+-
+-  } // xpathselect namespace
+-
+-} // local namespace
+-} // anonymous namespace
+-
+-namespace dbus
+-{
+-const std::string BUS_NAME = "com.canonical.Unity";
+-const std::string OBJECT_PATH = "/com/canonical/Unity/Debug";
+-
+-const std::string INTROSPECTION_XML =
+-  " <node>"
+-  "   <interface name='com.canonical.Autopilot.Introspection'>"
+-  ""
+-  "     <method name='GetState'>"
+-  "       <arg type='s' name='piece' direction='in' />"
+-  "       <arg type='a(sv)' name='state' direction='out' />"
+-  "     </method>"
+-  ""
+-  "     <method name='GetVersion'>"
+-  "       <arg type='s' name='version' direction='out' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  ""
+-  "   <interface name='com.canonical.Unity.Debug.Logging'>"
+-  ""
+-  "     <method name='StartLogToFile'>"
+-  "       <arg type='s' name='file_path' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='ResetLogging'>"
+-  "     </method>"
+-  ""
+-  "     <method name='SetLogSeverity'>"
+-  "       <arg type='s' name='log_component' direction='in' />"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "     </method>"
+-  ""
+-  "     <method name='LogMessage'>"
+-  "       <arg type='s' name='severity' direction='in' />"
+-  "       <arg type='s' name='message' direction='in' />"
+-  "     </method>"
+-  ""
+-  "   </interface>"
+-  " </node>";
+-}
+-
+-struct DebugDBusInterface::Impl
+-{
+-  Impl(Introspectable*);
+-
+-  GVariant* HandleDBusMethodCall(std::string const&, GVariant*);
+-  GVariant* GetState(std::string const&);
+-
+-  void StartLogToFile(std::string const&);
+-  void ResetLogging();
+-  void SetLogSeverity(std::string const& log_component, std::string const& severity);
+-  void LogMessage(std::string const& severity, std::string const& message);
+-
+-  Introspectable* introspection_root_;
+-  local::xpathselect::NodeSelector xns_;
+-  glib::DBusServer::Ptr server_;
+-  std::ofstream output_file_;
+-};
+-
+-DebugDBusInterface::DebugDBusInterface(Introspectable* root)
+-  : impl_(new DebugDBusInterface::Impl(root))
+-{}
+-
+-DebugDBusInterface::~DebugDBusInterface()
+-{}
+-
+-DebugDBusInterface::Impl::Impl(Introspectable* root)
+-  : introspection_root_(root)
+-  , server_((introspection_root_ && xns_) ? std::make_shared<glib::DBusServer>(dbus::BUS_NAME) : nullptr)
+-{
+-  if (server_)
+-  {
+-    server_->AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
+-
+-    for (auto const& obj : server_->GetObjects())
+-      obj->SetMethodsCallsHandler(sigc::mem_fun(this, &Impl::HandleDBusMethodCall));
+-  }
+-}
+-
+-GVariant* DebugDBusInterface::Impl::HandleDBusMethodCall(std::string const& method, GVariant* parameters)
+-{
+-  if (method == "GetState")
+-  {
+-    const gchar* input;
+-    g_variant_get(parameters, "(&s)", &input);
+-
+-    return GetState(input);
+-  }
+-  else if (method == "GetVersion")
+-  {
+-    return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
+-  }
+-  else if (method == "StartLogToFile")
+-  {
+-    const gchar* log_path;
+-    g_variant_get(parameters, "(&s)", &log_path);
+-
+-    StartLogToFile(log_path);
+-  }
+-  else if (method == "ResetLogging")
+-  {
+-    ResetLogging();
+-  }
+-  else if (method == "SetLogSeverity")
+-  {
+-    const gchar* component;
+-    const gchar* severity;
+-    g_variant_get(parameters, "(&s&s)", &component, &severity);
+-
+-    SetLogSeverity(component, severity);
+-  }
+-  else if (method == "LogMessage")
+-  {
+-    const gchar* severity;
+-    const gchar* message;
+-    g_variant_get(parameters, "(&s&s)", &severity, &message);
+-
+-    LogMessage(severity, message);
+-  }
+-
+-  return nullptr;
+-}
+-
+-GVariant* DebugDBusInterface::Impl::GetState(std::string const& query)
+-{
+-  GVariantBuilder builder;
+-  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
+-
+-  auto root_node = std::make_shared<local::IntrospectableAdapter>(introspection_root_);
+-  for (auto const& n : xns_.SelectNodes(root_node, query))
+-  {
+-    auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
+-    if (p)
+-      g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
+-  }
+-
+-  return g_variant_new("(a(sv))", &builder);
+-}
+-
+-void DebugDBusInterface::Impl::StartLogToFile(std::string const& file_path)
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  output_file_.open(file_path);
+-  nux::logging::Writer::Instance().SetOutputStream(output_file_);
+-}
+-
+-void DebugDBusInterface::Impl::ResetLogging()
+-{
+-  if (output_file_.is_open())
+-    output_file_.close();
+-
+-  nux::logging::Writer::Instance().SetOutputStream(std::cout);
+-  nux::logging::reset_logging();
+-}
+-
+-void DebugDBusInterface::Impl::SetLogSeverity(std::string const& log_component, std::string const& severity)
+-{
+-  nux::logging::Logger(log_component).SetLogLevel(nux::logging::get_logging_level(severity));
+-}
+-
+-void DebugDBusInterface::Impl::LogMessage(std::string const& severity, std::string const& message)
+-{
+-  nux::logging::Level level = nux::logging::get_logging_level(severity);
+-  nux::logging::Logger const& log_ref = Unwrap(logger);
+-  if (log_ref.GetEffectiveLogLevel() <= level)
+-  {
+-    nux::logging::LogStream(level, log_ref.module(), __FILE__, __LINE__).stream()
+-      << message;
+-  }
+-}
+-
+-} // debug namepsace
+-} // unity namespace
+diff --git a/unity-shared/DebugDBusInterface.h b/unity-shared/DebugDBusInterface.h
+deleted file mode 100644
+index 4083a61..0000000
+--- a/unity-shared/DebugDBusInterface.h
++++ /dev/null
+@@ -1,45 +0,0 @@
+-// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
+-/*
+- * Copyright (C) 2010-2013 Canonical Ltd
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 3 as
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- *
+- * Authored by: Alex Launi <alex.launi@canonical.com>
+- *              Marco Trevisan <marco.trevisan@canonical.com>
+- */
+-
+-#ifndef UNITY_DEBUG_DBUS_INTERFACE_H
+-#define UNITY_DEBUG_DBUS_INTERFACE_H
+-
+-#include <memory>
+-
+-namespace unity
+-{
+-namespace debug
+-{
+-class Introspectable;
+-
+-class DebugDBusInterface
+-{
+-public:
+-  DebugDBusInterface(Introspectable* root);
+-  ~DebugDBusInterface();
+-
+-private:
+-  struct Impl;
+-  std::unique_ptr<Impl> impl_;
+-};
+-}
+-}
+-
+-#endif /* _DEBUG_DBUS_INTERFACE_H */
+-- 
+2.10.2
+
diff --git a/srcpkgs/unity/patches/filemanager.patch b/srcpkgs/unity/patches/filemanager.patch
new file mode 100644
index 00000000000000..a3cb3b15c65aef
--- /dev/null
+++ b/srcpkgs/unity/patches/filemanager.patch
@@ -0,0 +1,11 @@
+--- a/unity-shared/FileManager.cpp	2022-09-13 20:31:15.000000000 +0530
++++ b/unity-shared/FileManager.cpp	2022-11-08 21:06:18.993493949 +0530
+@@ -52,7 +52,7 @@
+     }
+   }
+ 
+-  return fm;
++  return NemoFileManager::Get();
+ }
+ 
+ } // namespace unity
diff --git a/srcpkgs/unity/patches/fix-systemd-user-dir.patch b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
new file mode 100644
index 00000000000000..e9da307e9041ee
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-systemd-user-dir.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/data/CMakeLists.txt b/data/CMakeLists.txt
+--- a/data/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/data/CMakeLists.txt	2024-07-27 09:32:29.100314406 +0800
+@@ -41,3 +41,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ configure_file(unity7.service.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.service @ONLY)
+-pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)
++set(SYSTEMD_USER_DIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/user")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.service DESTINATION ${SYSTEMD_USER_DIR})
diff --git a/srcpkgs/unity/patches/fix-unity-python-script.patch b/srcpkgs/unity/patches/fix-unity-python-script.patch
new file mode 100644
index 00000000000000..2491240ff09f6c
--- /dev/null
+++ b/srcpkgs/unity/patches/fix-unity-python-script.patch
@@ -0,0 +1,8 @@
+diff -p1ru a/tools/unity.cmake b/tools/unity.cmake
+--- a/tools/unity.cmake	2023-02-23 02:37:45.000000000 +0800
++++ b/tools/unity.cmake	2024-08-06 08:22:11.142714435 +0800
+@@ -170,3 +170,3 @@ def process_and_start_unity (compiz_args
+ 
+-    if run_command == DEFAULT_COMMAND and not options.ignore_session_manager and \
++    if run_command == DEFAULT_COMMAND and \
+        (is_upstart_session() or is_systemd_session()):
diff --git a/srcpkgs/unity/patches/remove-niceties.patch b/srcpkgs/unity/patches/remove-niceties.patch
new file mode 100644
index 00000000000000..85cb5038b83508
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-niceties.patch
@@ -0,0 +1,58 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 12:42:06.728100337 +0800
+@@ -103,54 +103,2 @@ endif (CMAKE_BUILD_TYPE MATCHES coverage
+ 
+-
+-#
+-# Niceties
+-#
+-set (ARCHIVE_NAME unity-${UNITY_VERSION})
+-
+-add_custom_target (pre-distcheck
+-  COMMAND echo ""
+-       && echo "• Releasing Unity ${UNITY_VERSION}"
+-       && cd ${CMAKE_SOURCE_DIR}
+-       && echo "• Generating ChangeLog"
+-       && bzr log --gnu-changelog > ChangeLog
+-       && echo "• Generating AUTHORS"
+-       && bzr log --long --levels=0 | grep -e "^\\s*author:" | cut -d ":" -f 2 | sed "s/,/\n/g" | sed -r -f AUTHOR-glue | sort -u | uniq -i > AUTHORS
+-       && echo "• Running Distcheck"
+-  )
+-
+-add_custom_target (dist
+-  COMMAND echo "• Creating Tarball"
+-       && bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-       && echo "• Signing Tarball"
+-       && gpg --armor --sign --detach-sig ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(dist pre-distcheck)
+-
+-add_custom_target (distcheck
+-  COMMAND cd ${CMAKE_BINARY_DIR}
+-       && rm -rf ${ARCHIVE_NAME}
+-       && tar xf ${ARCHIVE_NAME}.tar.bz2
+-       && mkdir ${ARCHIVE_NAME}/build
+-       && cd ${ARCHIVE_NAME}/build
+-       && cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
+-       && make
+-       && make install
+-       && make check-headless
+-  )
+-add_dependencies(distcheck dist)
+-
+-add_custom_target (post-distcheck
+-  COMMAND echo "• Committing Release"
+-       && bzr commit -m\"Release ${UNITY_VERSION}\" --unchanged
+-       && echo "• Tagging Release"
+-       && bzr tag ${UNITY_VERSION}
+-       && echo "• Unity ${UNITY_VERSION} is ready for release."
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  )
+-add_dependencies(post-distcheck distcheck)
+-
+-add_custom_target (release)
+-add_dependencies (release distcheck)
+-
+ #
diff --git a/srcpkgs/unity/patches/remove-ubuntu-specific.patch b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
new file mode 100644
index 00000000000000..2dc8111ab7a750
--- /dev/null
+++ b/srcpkgs/unity/patches/remove-ubuntu-specific.patch
@@ -0,0 +1,37 @@
+diff -p1ru a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
+--- a/lockscreen/LockScreenController.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenController.cpp	2024-07-27 08:43:21.362157940 +0800
+@@ -96,7 +96,2 @@ Controller::Controller(DBusManager::Ptr
+   suspend_inhibitor_manager_->about_to_suspend.connect([this] () {
+-    if (Settings::Instance().lock_on_suspend())
+-    {
+-      InhibitPaint();
+-      session_manager_->PromptLockScreen();
+-    }
+   });
+@@ -106,3 +101,2 @@ Controller::Controller(DBusManager::Ptr
+ 
+-  Settings::Instance().lock_on_suspend.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+   Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Controller::SyncInhibitor)));
+@@ -603,3 +597,2 @@ void Controller::SyncInhibitor()
+                  !locked &&
+-                 Settings::Instance().lock_on_suspend() &&
+                  !Settings::Instance().use_legacy();
+diff -p1ru a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
+--- a/lockscreen/LockScreenSettings.cpp	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.cpp	2024-07-27 08:40:45.324177884 +0800
+@@ -50,3 +50,2 @@ const std::string LOCK_DELAY = "lock-del
+ const std::string LOCK_ENABLED = "lock-enabled";
+-const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
+ 
+@@ -90,3 +89,2 @@ struct Settings::Impl
+     s->lock_on_blank = g_settings_get_boolean(gs_settings_, LOCK_ENABLED.c_str()) != FALSE;
+-    s->lock_on_suspend = g_settings_get_boolean(gs_settings_, LOCK_ON_SUSPEND.c_str()) != FALSE;
+     s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
+diff -p1ru a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
+--- a/lockscreen/LockScreenSettings.h	2023-02-23 02:37:44.000000000 +0800
++++ b/lockscreen/LockScreenSettings.h	2024-07-27 08:43:35.025986444 +0800
+@@ -48,3 +48,2 @@ public:
+   nux::Property<bool> lock_on_blank;
+-  nux::Property<bool> lock_on_suspend;
+   nux::Property<bool> use_legacy;
diff --git a/srcpkgs/unity/patches/use-ayatana-libraries.patch b/srcpkgs/unity/patches/use-ayatana-libraries.patch
new file mode 100644
index 00000000000000..1fc9d7b51a3c9e
--- /dev/null
+++ b/srcpkgs/unity/patches/use-ayatana-libraries.patch
@@ -0,0 +1,90 @@
+diff -p1ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2023-02-23 02:37:59.000000000 +0800
++++ b/CMakeLists.txt	2024-07-27 08:48:23.292047534 +0800
+@@ -175,5 +175,5 @@ execute_process (COMMAND ${PKG_CONFIG_EX
+ execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} unity --variable lensesdir OUTPUT_VARIABLE LENSES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable indicatordir OUTPUT_VARIABLE INDICATORDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable iconsdir OUTPUT_VARIABLE INDICATORICONDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} ayatana-indicator3-0.4 --variable prefix OUTPUT_VARIABLE INDICATORPREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (INDICATOR_SERVICE_DIR "${INDICATORPREFIX}/share/${PROJECT_NAME}/indicators")
+@@ -243,3 +243,3 @@ set(UNITY_PLUGIN_SHARED_DEPS
+     gtk+-3.0>=3.1
+-    indicator3-0.4>=0.4.90
++    ayatana-indicator3-0.4
+     json-glib-1.0
+diff -p1ru a/launcher/ApplicationLauncherIcon.h b/launcher/ApplicationLauncherIcon.h
+--- a/launcher/ApplicationLauncherIcon.h	2023-02-23 02:37:44.000000000 +0800
++++ b/launcher/ApplicationLauncherIcon.h	2024-07-27 08:49:55.159958565 +0800
+@@ -26,3 +26,3 @@
+ 
+-#include <libindicator/indicator-desktop-shortcuts.h>
++#include <libayatana-indicator/indicator-desktop-shortcuts.h>
+ 
+diff -p1ru a/services/CMakeLists.txt b/services/CMakeLists.txt
+--- a/services/CMakeLists.txt	2023-02-23 02:37:44.000000000 +0800
++++ b/services/CMakeLists.txt	2024-07-27 08:48:57.861323543 +0800
+@@ -11,5 +11,5 @@ set(UNITY_PANEL_SERVICE_DEPS
+     gtk+-3.0>=3.3
+-    indicator3-0.4>=12.10.2
++    ayatana-indicator3-0.4
+     x11
+-    libido3-0.1>=13.0.0
++    libayatana-ido3-0.4
+ )
+diff -p1ru a/services/panel-indicator-accessible.h b/services/panel-indicator-accessible.h
+--- a/services/panel-indicator-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-accessible.h	2024-07-27 08:51:14.274496085 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-indicator-entry-accessible.h b/services/panel-indicator-entry-accessible.h
+--- a/services/panel-indicator-entry-accessible.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-indicator-entry-accessible.h	2024-07-27 08:50:43.352042575 +0800
+@@ -22,4 +22,4 @@
+ #include <atk/atk.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/services/panel-main.c b/services/panel-main.c
+--- a/services/panel-main.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-main.c	2024-07-27 08:51:58.115405592 +0800
+@@ -24,3 +24,3 @@
+ #include <gtk/gtk.h>
+-#include <libido/libido.h>
++#include <libayatana-ido/libayatana-ido.h>
+ 
+diff -p1ru a/services/panel-service.c b/services/panel-service.c
+--- a/services/panel-service.c	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.c	2024-07-27 08:51:36.358532591 +0800
+@@ -30,3 +30,3 @@
+ #include <glib/gi18n-lib.h>
+-#include <libindicator/indicator-ng.h>
++#include <libayatana-indicator/indicator-ng.h>
+ 
+diff -p1ru a/services/panel-service.h b/services/panel-service.h
+--- a/services/panel-service.h	2023-02-23 02:37:44.000000000 +0800
++++ b/services/panel-service.h	2024-07-27 08:50:56.180453579 +0800
+@@ -22,4 +22,4 @@
+ #include <glib-object.h>
+-#include <libindicator/indicator.h>
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
+diff -p1ru a/tests/mock_indicator_object.h b/tests/mock_indicator_object.h
+--- a/tests/mock_indicator_object.h	2023-02-23 02:37:45.000000000 +0800
++++ b/tests/mock_indicator_object.h	2024-07-27 08:50:18.488617071 +0800
+@@ -24,3 +24,3 @@
+ 
+-#include <libindicator/indicator-object.h>
++#include <libayatana-indicator/indicator-object.h>
+ 
diff --git a/srcpkgs/unity/template b/srcpkgs/unity/template
new file mode 100644
index 00000000000000..8cd6a6d3cd1b18
--- /dev/null
+++ b/srcpkgs/unity/template
@@ -0,0 +1,74 @@
+# Template file for 'unity'
+pkgname=unity
+version=7.7.0+23.04.20230222.2
+revision=1
+_ubuntu_rel=0ubuntu7
+build_style=cmake
+configure_args="-Wno-dev -DCOMPIZ_BUILD_WITH_RPATH=FALSE \
+ -DCOMPIZ_PACKAGING_ENABLED=TRUE -DCOMPIZ_PLUGIN_INSTALL_TYPE=package \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DUSE_GSETTINGS=TRUE -DENABLE_UNIT_TESTS=OFF \
+ -DCMAKE_MODULE_PATH=/usr/share/cmake/Modules"
+hostmakedepends="chrpath doxygen flex intltool libglvnd patchutils pkg-config
+ python3-setuptools"
+makedepends="appstream-glib-devel ayatana-ido-devel bamf-devel boost-devel
+ cairo-devel compiz-ubuntu-devel glew-devel gnome-desktop-devel
+ libayatana-indicator-devel libnotify-devel libunity-devel libunity-misc-devel
+ libXfixes-devel libXi-devel nux-devel pam-devel unity-settings-daemon-devel
+ zeitgeist-devel"
+depends="boost clutter-gtk dbus-activation-env gjs gnome-desktop gnome-keyring
+ gnome-screensaver gnome-session gsettings-ubuntu-schemas hud
+ lightdm-unity-greeter notify-osd python3-xdg unity-asset-pool"
+short_desc="Desktop platform based on technologies such as Nux, GTK and Compiz"
+maintainer="Earldridge Jazzed Pineda <earldridgejazzedpineda@gmail.com>"
+license="GPL-3.0-only"
+homepage="https://unityd.org"
+distfiles="https://launchpad.net/ubuntu/+archive/primary/+files/unity_${version}-${_ubuntu_rel}.tar.xz"
+checksum=121cc674bf1b901d474f1de10e1d16b7d3dea6d32380af7f47ef4de2ff580c7b
+keep_libtool_archives=yes
+python_version=3
+
+do_patch() {
+	for i in $(grep -v '#' debian/patches/series); do
+		patch -p1 -i "debian/patches/${i}"
+	done
+
+	rm -f resources/launcher_bfb.svg
+	cp ${FILESDIR}/launcher_bfb.png resources
+}
+
+pre_configure() {
+	export CXXFLAGS+=" -g -O0"
+
+	export CCACHE_SLOPPINESS=time_macros
+}
+
+post_install() {
+	pushd uwidgets
+	python3 setup.py install --root="${DESTDIR}"
+	popd
+	vinstall uwidgets/uwidgets-runner.desktop 755 etc/xdg/autostart
+
+	cp ${FILESDIR}/unity.pam ${DESTDIR}/etc/pam.d/unity
+
+	mkdir -p ${DESTDIR}/usr/share/unity-control-center/keybindings
+	ln -s \
+	${DESTDIR}/usr/share/gnome-control-center/keybindings/50-unity-launchers.xml \
+	${DESTDIR}/usr/share/unity-control-center/keybindings/50-unity-launchers.xml
+
+	vsv unity7
+	vsv unity-panel-service
+	vsv unity-panel-service-lockscreen
+}
+
+unity-devel_package() {
+	short_desc+=" - development files"
+	depends="${sourcepkg}>=${version}_${revision} dee-devel libglib-devel
+	 libsigc++-devel nux-devel"
+	pkg_install() {
+		vmove usr/include
+		vmove "usr/lib/*.so"
+		vmove usr/lib/pkgconfig
+	}
+}
diff --git a/srcpkgs/yaru/template b/srcpkgs/yaru/template
index 4632da13a6688e..ac51ad0ba4bcbf 100644
--- a/srcpkgs/yaru/template
+++ b/srcpkgs/yaru/template
@@ -1,9 +1,9 @@
 # Template file for 'yaru'
 pkgname=yaru
 version=24.04.3
-revision=1
+revision=2
 build_style=meson
-configure_args="-Dxfwm4=true"
+configure_args="-Dxfwm4=true -Dubuntu-unity=true"
 hostmakedepends="glib-devel sassc pkg-config inkscape"
 makedepends="gtk+3-devel libglib-devel"
 short_desc="Default Ubuntu 18.10+ theme"

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: New packages for the Unity desktop environment
  2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
                   ` (54 preceding siblings ...)
  2024-08-15  1:33 ` EarldridgeJazzedPineda
@ 2024-09-02  2:29 ` EarldridgeJazzedPineda
  55 siblings, 0 replies; 57+ messages in thread
From: EarldridgeJazzedPineda @ 2024-09-02  2:29 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 237 bytes --]

New comment by EarldridgeJazzedPineda on void-packages repository

https://github.com/void-linux/void-packages/pull/51509#issuecomment-2323656836

Comment:
I no longer have a Void Linux virtual machine, but feel free to continue my work

^ permalink raw reply	[flat|nested] 57+ messages in thread

end of thread, other threads:[~2024-09-02  2:29 UTC | newest]

Thread overview: 57+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-28  6:03 [PR PATCH] New packages for the Unity desktop environment EarldridgeJazzedPineda
2024-07-28  6:04 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-07-28  6:13 ` abenson
2024-07-28  6:27 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-07-28  8:06 ` EarldridgeJazzedPineda
2024-07-29  7:07 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-07-30  2:46 ` EarldridgeJazzedPineda
2024-07-30  3:11 ` EarldridgeJazzedPineda
2024-07-30  3:12 ` EarldridgeJazzedPineda
2024-07-30  3:35 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-07-30  3:35 ` EarldridgeJazzedPineda
2024-07-30  5:07 ` EarldridgeJazzedPineda
2024-07-30 23:50 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-07-31  0:03 ` EarldridgeJazzedPineda
2024-07-31  0:12 ` EarldridgeJazzedPineda
2024-07-31  1:21 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-07-31  2:42 ` EarldridgeJazzedPineda
2024-07-31  3:21 ` EarldridgeJazzedPineda
2024-07-31  3:29 ` EarldridgeJazzedPineda
2024-07-31  9:24 ` EarldridgeJazzedPineda
2024-08-01 11:59 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-08-01 11:59 ` EarldridgeJazzedPineda
2024-08-01 12:00 ` EarldridgeJazzedPineda
2024-08-01 12:08 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-08-01 12:51 ` EarldridgeJazzedPineda
2024-08-02 13:20 ` [PR PATCH] [Updated] " EarldridgeJazzedPineda
2024-08-03  3:08 ` EarldridgeJazzedPineda
2024-08-03  3:50 ` EarldridgeJazzedPineda
2024-08-03  6:15 ` EarldridgeJazzedPineda
2024-08-03  8:00 ` EarldridgeJazzedPineda
2024-08-04 23:51 ` EarldridgeJazzedPineda
2024-08-05  3:36 ` EarldridgeJazzedPineda
2024-08-05  3:38 ` EarldridgeJazzedPineda
2024-08-05  4:25 ` EarldridgeJazzedPineda
2024-08-05  5:10 ` EarldridgeJazzedPineda
2024-08-05 11:44 ` EarldridgeJazzedPineda
2024-08-05 12:21 ` EarldridgeJazzedPineda
2024-08-05 12:50 ` EarldridgeJazzedPineda
2024-08-05 13:00 ` EarldridgeJazzedPineda
2024-08-06  0:07 ` EarldridgeJazzedPineda
2024-08-06  1:26 ` EarldridgeJazzedPineda
2024-08-06  3:20 ` EarldridgeJazzedPineda
2024-08-06 23:38 ` EarldridgeJazzedPineda
2024-08-08  4:38 ` EarldridgeJazzedPineda
2024-08-08  5:09 ` EarldridgeJazzedPineda
2024-08-08  5:33 ` EarldridgeJazzedPineda
2024-08-09  4:57 ` EarldridgeJazzedPineda
2024-08-09  5:00 ` EarldridgeJazzedPineda
2024-08-09 11:35 ` EarldridgeJazzedPineda
2024-08-10  5:14 ` EarldridgeJazzedPineda
2024-08-13  8:45 ` EarldridgeJazzedPineda
2024-08-13  8:49 ` EarldridgeJazzedPineda
2024-08-13 10:08 ` EarldridgeJazzedPineda
2024-08-13 10:15 ` EarldridgeJazzedPineda
2024-08-13 10:22 ` EarldridgeJazzedPineda
2024-08-15  1:33 ` EarldridgeJazzedPineda
2024-09-02  2:29 ` EarldridgeJazzedPineda

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).